# Unity3d Mecanim动画如何应用3dmax中的动画位移

Unity3d Mecanim动画如何应用3dmax中的动画位移

大家好!我是小周,这是我的第一篇博客,自己喜欢游戏,所以大学报了计算机专业,毕业以后也如愿以偿的进入了游戏开发者的队列,现在用Unity3d做MMORPG游戏快一年了,尝试着分享一下自己的经验。
每博加油:不计成本地努力!

程序动画流程

游戏当中角色动画前后制作过程:2D形象设计图->3D模型制作->为模型搭建骨骼制作动画->导出FBX->导入FBX->程序控制动画展现(主要讲述 3dmax 到 unity3d的过程)。
为了达到应用3dmax中的动画位移的目的,在上诉环节应该注意的一些地方,如果没有注意到,则多半需要返工啦,经验就是这么被实践出来的。。。

3D模型制作注意事项

在3dmax中制作好模型以后,一定要记得用ResetXform重置一下,否则在后续环节中很大可能会出错(比如大小比例、旋转不对等等),至于重置的作用,这里就不多讲了,可以百度一下ResetXform。

骨骼搭建和制作动画注意事项

如果要应用3dmax中的动画位移作为程序位移,则unity3d不支持3dmax中的虚拟体和约束关系,所以在搭建骨骼的时候不要使用虚拟体和约束关系。
为了应用3dmax动画中的位移,则需要一个根“根骨骼”,来用做程序中的Root Node。“根骨骼”起着至关重要的作用,在讲“根骨骼”之前,先来讲讲这两种软件的参考坐标系。
也许你会问参考坐标系有什么好讲的,我也认为没什么好讲的,但是两种软件的参考坐标系不一样,如果不注意这点,可能会带来一些不必要的麻烦。
在unity3d中是左手坐标系(Y轴朝上、Z轴朝前、X轴向右)、而在3dmax中是右手坐标系(Z轴朝上、Y轴朝前、X轴向右),而且不同的轴向分量在导出导入后对应关系也不一样,下面是自己试验得出的对应关系:
3dmax.z = unity3d.y
3dmax.x = -unity3d.x
3dmax.y = -unity3d.z
( - 为负号)
如果没考虑到对应关系,直接在3dmax做一个向前运动的动画(即向着3dmax的Y轴正向移动),在导入到unity3d以后就不是向前移动,按照上面的对应关系则是向后移动,所以要在unity3d中得到正确的结果,则在3dmax中制作动画时应该把Y轴负方向做为向前移动的方向,把X轴负方向作为向右移动的方向,竖直轴还是Z轴。
回过头来讲“根骨骼”,为了满足上诉移动方向的需求,则搭建骨骼的时候模型朝向Y轴负方向,“根骨骼”也应是朝向Y轴负方向,后续搭建的骨骼,都必须是“根骨骼”的子节点,“根骨骼”的位置是模型中心位置在水平面XY上的投映点,动作有标准起始动作,这一帧的“根骨骼”应该在世界坐标的原点,由于导出导入、坐标系对应关系和unity3d参数设置的原因,“根骨骼”在动画制作过程中,不能有旋转,而且只能在Y轴上运动,大致保持着模型中心映射到水平面XY上的位置(根据程序导入后的效果有微调)。

3dmax导出注意事项

做好以后,可以整体导出,也可以分段导出多个,格式为FBX。
导出要注意单位,一般为米,一个项目应该有统一的标准。
由于上述的参考坐标系的不同,在导出要设置“Y-up”(Advanced Options—>Axis Conversion中),unity3d是Y轴向上。
3dmax2011是比较稳定的版本,但是导出的FBX会比2014等高版本导出的资源大小更大,所以在保证效果的前提的下,可把做好的动作用高版本的3dmax导出,这样会减少不少的资源量。

导入unity3d注意事项

FBX导入unity3d以后,参数的设置:
在Model面板中,Scale Factor 大小比例,根据项目实际情况而定,一个项目应该有统一的标准,Import BlendShapes一般用于做面部精细的表情,所以一般不勾选。
在Rig面板中,Animation Type选择Generic(Mecanim在Humanoid的基础上增强了对Bone的骨骼支持),Root Node则选择上述的“根骨骼”。如果是多个FBX文件,设置好了一条标准骨骼,则Copy From Other Avatar即可。
在Animations面板中,Anim.Compression一般不需要,选择Off,因为动作已经做得比较完善了,如果选择了其他,会二次调整动画的表现,增加一些微调,与预期效果不一样。Clips中分割好每一个动作,这里需要注意的是每一个片段的开头都必须是标准动作(如果是连击动作去接上一击的动作除外),“根骨骼”在世界坐标原点(即便是连击动作,要进行这样的分段,则在每段开始时,在制作时“根骨骼”也要托回到世界坐标原点,在继续移动)。然后设置每一段动画的参数,要应用3dmax动画中的位移则设置参数如下图:
# Unity3d Mecanim动画如何应用3dmax中的动画位移_第1张图片

程序应用3dmax动画位移作为程序位移

最后就是在程序中实现,实例一个对应FBX模型对象,然后加上Animator组件(一般会自动加上),新建一个Animaotr Controller将上述分好的动画片段引入,Avatar用对应FBX统一用的标准骨骼。控制播放哪段动画,这里就不细讲了,可以上网搜索Mecanim动画系统。
这里讲一下注意事项:
1.要应用动画中的位移作为程序位移,Animator组件上有一个总开关Apply Root Motion,如果要应用,则需勾选。
2.如果对象上还存在Rigidbody刚体组件,则Constraints中Freeze Position中的 X 与 Z 不能勾选,若果勾选了,即是锁定水平上的移动,应用动画位移就体现不出来。

上述经验可能不全面,如果遇到新的问题,可以一起讨论讨论,如果错误,还望指正,回复或者联系我的QQ489289839都可以,感谢大家阅读我的博客。

你可能感兴趣的:(unity3d)