2015-04-23 10:35:16 chenluwolf 阅读数 2241
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4630 人正在学习 去看看 张刚

http://www.element3ds.com/thread-3115-1-1.html
从max导出FBX到Unity,以下环节需要特别注意。  
1,单位设置 
  很多人在建模,动画的时候,默认的max system unit是设置的inch,建议修改成metres或者centimetres,否则导出的模型和动画可能比例不一致  

2,导出物 
  在导出模型和动画时,建议选择的导出模式,是根据你要导出模型或者动画,使用export selected模式导出,即,只导出选中的对象。 

4,可能丢失蒙皮信息的原因1 
在使用export selected导出模型时,要选中你要导出的模型,以及全选所有的骨骼,才会有蒙皮信息。查看导出的FBX有没有蒙皮信息,可以把FBX文件拖到Unity里,看Mesh上面有没有一个参数叫做skined mesh material,如果没有,则是你没有选中骨骼就导出了,因此没有蒙皮信息。

5,可能丢失蒙皮信息的原因2 
在导出有蒙皮信息的模型文件成FBX时,一定要给每一个模型或者sub mesh指定他们的材质,且给每个材质正确的命名,且其Diffusemap不能为空。 否则也不会有skined mesh mat,也就是蒙皮信息也无法导出。

6,ResetXForm  
记得在skin或者physique之前,一定要严格的进行ResetXForm,否则导出的FBX,模型会有严重的偏移;    以下是自用的FBX自动导出脚本说明书 


FBX_AniExporter.ms    
当模型/动画的unit和system的unit一致时(建议都是 centimetres),使用这个脚本进行FBX动画文件的批量导出,需要修改里面的导入文件夹和导出文件夹路径,脚本会对导出FBX自动命名;脚本会自动全选场景中所有的$Bip*和$Bone*,以及1个模型进行导出;  


FBX_AllMeshExporter.ms   
批量导出场景中的所有模型/子物体为一个个单独的FBX 模型文件(含模型,UV,蒙皮信息,不含动画信息);脚本在导出时自动使用以下规则:模型1+全部$Bip+全部$Bone,模型2+全部$bip+全部$Bone,模型3+全部$bip+全部$Bone; 


FBX_MeshExporter.ms 
旧版的FBX_AllMeshExporter,可以不管; ANI_1by1.ms   当模型/动画的unit和system的unit设置不一致时,将system unit设定正确,然后逐个打开要导出的max文件,使用这个脚本一个个导出;  InitMatFile.ms    给场景中所有模型/子物体设置独立的材质球,给材质球自动命名为模型的名字并且填充Diffuse Map,需要指定其中的map路径,且map路径里的TGA贴图张数不能小于场景里的模型数量,脚本才能正确运行;  


Select2Export   
故名思意,导出选中的模型和骨骼。


Unity3d模型导入技巧  


Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入untiy似乎也不能解决


1、x轴向偏转   
3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的时候,你会发现y轴参照方向永远朝上,而x和z轴则以模型本身的局部坐标为准,这样当模型沿x轴旋转270度之后,z轴正好与y轴重合,这样你试图用程序控制方向的时候就会发现旋转y和旋转z效果相同,这显然不是你期望的结果。解决这个问题的方法是,将.max文件导出为.3ds文件再导入untiy,而不是官方说的导成.fbx   


2、材质问题  
模型在3dmax里赋予材质之后,不管通过何种方式导入到unity中,都是没有材质的,好在untiy自动生成了这些材质的材质球,我们需要做的是将贴图再重新设置一遍,如果你的材质还有其他效果,比如lightmap,则需要选择正确的shader之后再设置贴图。   另外一个是多重材质,多重材质暂时还不知道如何在unity中显示,所以在制作模型的之后,应该先确定哪些部件应该合在一起,而哪些需要独立,比如,对于一架直升飞机来说,身体和螺旋桨就可以分为两个部件,而不应该把螺旋桨与发动机合并成一个部件,这样程序就无法旋转螺旋桨了。  


3、缩放因子问题   
模型导入到untiy中,如果你之前在3dmax中没有关心过“单位”问题,则它在场景里的大小一定会出呼你的意料。   
unity中的1单位是fbx文件中的1单位的100倍  所以,如果我们想unity中使用1单位=1米的话,那在max和maya中
制作的时候,单位就设置成1厘米  如果我们想unity中1单位=100M,那单位就设置为1M  如果我们想unity中1单
位=1厘米的话,那单位就设置为0.1毫米,或者在单位为1厘米的情况下把比例因子改为1    在max中,单设置应
该像这样   1Unit = 1厘米,这样在unity中1格就等3dmax中的1M了




针对经常出现的问题,将需要注意的点罗列如下:   


1、物体的头要朝下


2、所有游戏中的车辆飞机大致都可以分成两个部分,一个是身体,一个是炮台或螺旋桨,那么身体要有一个统一的名称,都叫做Body,螺旋桨叫做Airscrew,炮台叫做 Barbette ,这样我就可以找到所有的身体,并把爆炸效果的火焰和身体连接起来   


3、模型尺寸比例问题,参考前文所说的设置,另外不管是飞机,还是坦克,尺寸都在10米左右(以这个尺寸为基准),也就是3dmax里的10格大小   


4、模型要在场景中居中,否则导入物体质心位置不对  


5、起名字可以起这个武器的实际名称,如果不知道的话,也可以叫做Tank1,Tank2这样,
但最重要的是贴图名字和模型名字要相同,否则很乱。 
2015-09-17 19:25:35 ynnmnm 阅读数 4211
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4630 人正在学习 去看看 张刚

Unity3D导入FBX文件,动画名字一般默认是“Take 001”。如何修改呢?有两个方法:

  1. 按照Unity3D的FBX文件命名规则修改FBX文件名,角色名@动作名.FBX。比如boss-attack.fbx,动作名是Take 001,文件名修改为boss@attack.fbx,动作名就自动改为attack了。

  2. 在Unity3D中点选FBX文件,在Inspector窗口点Animations Tab。在最下面可以看到动画索引区域,这里有一个文本区域是动画名,点选可以修改。

2017-08-24 10:27:45 beihuanlihe130 阅读数 14875
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4630 人正在学习 去看看 张刚

当我们将模型导入到Unity3D中时,经常会遇到模型的中心点与物体中心点相差甚远的情况,如下图所示:
物体中心点与物体中心不一致
这种情况通常会对我们的物体位置控制产生一些不利影响(当然这种设置也有其存在的好处……)
要解决类似问题,我们通常可以在Unity3D中进行设置。
1. 设置一个空物体作为我们进行修改的模型的父物体,设置其坐标为(0,0,0),随后将我们需要修改的子物体拖动到与父物体坐标系原点相重合的位置这样便可实现我们预期的目标。
这里写图片描述
2. 通过代码设置中心点

/// <summary>
/// 重置模型的中心点位置
/// </summary>
[MenuItem("Tool/ResetCenterPosition")]
public static void ResetCenterPosition()
{
    Transform transform = Selection.activeTransform;
    Bounds bounds = new Bounds(Vector3.zero, Vector3.zero);
    Vector3 center = Vector3.zero;
    //获取物体的Bound最终合成信息
    foreach (var item in transform.GetComponentsInChildren<MeshRenderer>())
    {
        bounds.Encapsulate(item.bounds);
    }
    center = bounds.center;
    //新建空物体,将原来中心点有问题的物体放置到该物体下作为子物体存在
    GameObject obj = new GameObject();
    obj.name = transform.name;
    obj.transform.position = center;
    obj.transform.rotation = Quaternion.identity;
    //获取原物体在模型中的路径
    string selectedObjPath = "";
    Transform currentSelectTransform = transform;
    while (currentSelectTransform.parent != null)
    {
        selectedObjPath = currentSelectTransform.parent.name + "/" + selectedObjPath;
        currentSelectTransform = currentSelectTransform.parent;
    }
    //设置空物体的层级,使之与原物体处于同一层级
    obj.transform.SetParent(GameObject.Find(selectedObjPath).transform);
    transform.SetParent(obj.transform);
}

该方法同样通过计算当前物体及子物体的Bounds的大小和位置,新建一个空物体,将空物体的位置放置在模型Bounds的中心点中,将原来的物体设置为空物体的子物体来实现坐标点的重置。该方法为单个物体进行重置,也可以通过修改代码,自动将整个模型中的所有物体进行重置,但是需要注意的是该种方法并没有改变原始物体MeshFilter的中心点位置,如果用户要对其MeshFilter进行操作,可能会有其他的情况发生。
如果需要对物体进行碰撞或者射线检测,然后在进行位置的操作,请先确定操作的物体是空物体还是有网格信息的物体。否则不会出现预期的效果。
3. 通过将FBX文件重新导入到3DMax中进行设置来完成对Pivot的重置,该方法可以从本质上实现对模型中心点的设置。
将模型导入到3DMax中后,全选所有物体,选择右侧工具栏的层次->轴->仅影响轴->居中到对象。然后再将模型导出即可。
3DMax中居中到对象
4. 另一种方式可以通过重新计算MeshFilter的方式进行,该种方法暂时无法得到模型准确的中心点,需要借助Bounds来计算,但是无法通过MeshFilter中所有的点的平均位置来计算,因此暂时无法对不规则物体进行中心点重置,这种方法仅供参考,可以在此基础上深入研究。

[MenuItem("Tool/ResetCenterPositionWithMeshFilter")]
public static void ResetCenterPositionWithMeshFilter()
{
    Transform transform = Selection.activeTransform;
    //获取物体的Bound最终合成信息
    foreach (var item in transform.GetComponentsInChildren<MeshFilter>())
    {
        Vector3[] testVector = item.mesh.vertices;
        for (int i = 0; i < testVector.Length; i++)
        {
            testVector[i] += new Vector3(1, 1, 1);
        }
        item.mesh.vertices = testVector;
        item.mesh.RecalculateBounds();
        item.mesh.RecalculateNormals();
        item.mesh.RecalculateTangents();
    }
}
2018-08-17 11:55:40 u012801153 阅读数 5229
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4630 人正在学习 去看看 张刚

编辑器并不提供将GameObject导出成fbx文件的功能。使用插件FBX Exporter。

https://download.csdn.net/download/u012801153/10610147

这款插件要求比较高
这里写图片描述

2015-02-08 16:42:27 Qst_Baron 阅读数 669
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4630 人正在学习 去看看 张刚

欢迎来到unity学习unity培训unity企业培训教育专区,这里有很多U3D资源U3D培训视频U3D教程U3D常见问题U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌。 

 

FBX 导出指南 

 

       Unity 支持 FBX 文件,这种文件可以在许多流行三维应用软件中生成。遵循以下指南有助于获得最佳结果。 

 

        选择 (Select) > 准备 (Prepare) > 检查设置 (Prepare) > 导出 (Prepare) > 验证 (Prepare) > 导入 (Import)您想导出什么内容?了解导出范围,如网格、相机、灯光、动画绑定等 - 文章出处【狗刨学习网】

 

· 应用程序通常可供导出选定对象 (selected objects) 或整个场景 (whole scene) 

· 确保通过导出选定项或移除场景中不需要的数据,只导出想要用到的场景中的对象。 

· 良好的工作习惯往往意味着保留工作文件中的所有灯光、指南、控制设备等,通过导出预设值或自定义场景导出工具导出选定项 (export selected),导出所需数据。

 

您想包含什么内容?准备资源: 

 

· 网格 – 移除创建记录,Nurbs、Nurms、Subdiv 表面必须转化为多边形,如三角形或四边形。 

· 动画 – 选择正确的工具,检查帧速率,动画时长等。 

· 纹理 – 确保纹理来源于 Unity 工程或复制到工程的 \textures 文件夹下。 

· 平滑 – 检查是否想要平滑组和/或平滑网格。

 

如何包含这些元素?检查 FBX 导出设置 

 

· 注意导出对话框中的设置,了解要导出的内容并与 Unity 中的 fbx 设置相匹配,见下图 1、2、3。 

· 可导出节点、标记及其变换参数。 

· 此时相机和灯光不导入 Unity

您使用哪个 FBX 版本?如果有疑问,请使用 2012.2 

 

· Autodesk 定期更新 FBX 安装程序,软件版本不同或使用其他第三方三维应用程序,效果也将不同。 

· 查看高级选项 (See Advanced Options) > FBX 文件格式 (FBX file format)


有用吗?验证导出

· 检查文件大小 – 仔细检查文件大小(如 >10kb?) 

· 将 FBX 重新导入到所用三维资源包的新场景中并生成 – 这是您想要的吗?

 

导入! 

 

· 导入到 Unity 

· 检查检视器中的 FBX 导入设置:纹理、动画、平滑等。

查看下面的 Maya FBX 对话框示例: 

图 1 一般,几何体和动画 

 


图 2 灯光,高级选项 


 

没有更多推荐了,返回首页