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

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

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

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

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

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


 


 

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

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


 

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

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

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


 

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


 

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


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


因为鱼的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上,对鱼的方向进行调整。这是预制体内部骨骼结构。



root上挂载 Ef_RotateDir.CS文件
 

 using UnityEngine;

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

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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值