【3dsmax】导入Unity3D需要注意的轴问题


 轴心绕x轴旋转90度,轴心对齐物体中心,导出选择Y轴朝上



3dsmax在默认配置下导出3D模型到Unity3D中会产生一些问题的。

首先,就算一个普通的立方体不做修改,保证是没有旋转的,也就是XYZ的Rotation皆为(0,0,0),导入到Unity3D的时候,你也会发现这个问题会莫名其妙地绕X轴旋转了-90度。

其实你也应该注意到3dsmax中的坐标系不是像Unity3D中标准的笛卡尔坐标系。它刚好反过来。3ds Max采用的是右手坐标系统,Unity则是标准的左手坐标系统。我们需要进行一些修正。

unity android平台图片导入慢 unity3d导入图片_unity


 

unity android平台图片导入慢 unity3d导入图片_3d_02


 

同时还有一个问题,3dsmax中基本模型的轴心不是就是其重心,处于其底面的中心。

这对于我们在处理3dsmax的旋转,会产生很大的问题。

unity android平台图片导入慢 unity3d导入图片_3d_03


 

为了解决这两个问题,你需要对模型的轴进行修正,具体的做法如下,

1、选定其中一个模型,在层次界面Hierarchy选择仅影响轴Affect Pivot Only,先选定其轴。

2、对其轴绕X轴正方向旋转+90度,并且根据其模型的大小,比如这里的立方体是10x10x10cm,就将其轴向Z轴向上5cm放到其重心位置。使其中心与重心重合。

unity android平台图片导入慢 unity3d导入图片_3dsmax_04


 

3、在导出的时候在高级选项中将轴转化中的向上轴改为Y-up。

unity android平台图片导入慢 unity3d导入图片_3d_05


 

那么再放到Unity3D中就没有上述的两个问题了,全是轴在作怪。
-------
捕鱼2d游戏模型设置为负x轴,向上轴朝着z轴方向转个35度角,而发射点是朝着x轴发射。root虚拟体是不动的,修改bip001的朝向就行,关闭动画记录按钮。旋转操作轴,对已经存在的动画曲线修改。


unity android平台图片导入慢 unity3d导入图片_3d_06


2、有个规则得主意:不能对已经实例化的物体内部进行脚本控制,否则报错。一个挂载在prefab上的Ef_RotateDir.CS调整方向脚本,对prefab的内部root进行调整。结果报错如下。

unity android平台图片导入慢 unity3d导入图片_3d_07


因为鱼的FishMaker.cs脚本挂载在prefabs上

fish.AddComponent<Ef_AutoRotate>().speed = angSpeed;调用了Ef_AutoRotate.cs,有x轴对方向拐弯调整

 transform.Rotate(Vector3.forward, speed * Time.deltaTime);再加一个Ef_RotateDir.CS话会就会扭曲水平位置,导致鱼群跳出bg屏幕碰撞体。


但不能对已经实例化的物体内部进行脚本控制,否则如上图一样报错。

this.transform.Find("root").transform.Rotate(Vector3.right, DirXrot);


但可以对实例化的本体进行控制,或者在实例化之前进行脚本加入。

可以写一个脚本挂载在鱼的预制体内部的根骨骼root上,对鱼的方向进行调整。这是预制体内部骨骼结构。

unity android平台图片导入慢 unity3d导入图片_3d_08



root上挂载 Ef_RotateDir.CS文件

 

using UnityEngine;

public class Ef_RotateDir : MonoBehaviour
{
    public float DirXrot = 0.0f;

    void Start()
    {
        this.transform.Rotate(Vector3.right, DirXrot);
    }
}