2018-10-09 16:02:51 qq_42850166 阅读数 2802

Unity3D中下载的模型动画自带位移,就是说没有写任何脚本,在动画控制器上添加动画,模型会自己移动,在模型Animator组件的属性上有一个Apply Root Motion的值,将勾选去掉的话就不会再自带位移了,勾上就是模型自带位移。
在这里插入图片描述

2016-01-06 18:13:34 a44860589 阅读数 1453

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动画中的位移则设置参数如下图:
这里写图片描述

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

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

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

2014-09-17 10:51:40 huodianyan 阅读数 5645

由于目前我们正在做的这个游戏中可能暂时还没有太强烈的需求去使用Mecanim动画系统中最新的Humanoid类型动画,我们首选的还会使用Generic动画,所以呢,前路漫漫其修远,大坑前面等你栽。 确定要使用Generic动画之后,那就继续呗。因为之前项目中使用的都是旧的动画系统(Legacy),所有角色和NPC的动画都是在原点做动作,角色和NPC在播放动画的同时需要通过脚本来控制角色的位移,这个要求负责程序和负责动画的童鞋密切合作把角色动画位移调整到一个协调的状态,这个当然也不是什么特别困难的事情,要不你看现在App Store里的所有游戏不都好好的嘛。 不过如果能让动画直接带上位移,那么程序和美术童鞋都解放了,动画设计的时候就能更大胆了,毕竟角色动画的真实位移相对于程序控制的更协调,而且大家都省了不少的事情,何乐不为啊。废话说了一大堆,好吧,回到正题。 那就做一个连续的带位移的动画吧,导入Unity之后,创建Animator Controller之后,把动作设置好,点击Play按钮,看看效果吧。尼玛,发现单个动画在播放的过程中角色确实发生位移了,但是每个动画结束之后回到IDLE状态动画的时候,角色在场景中的位置会发生一次闪回,直接重新归位到动画开始播放时角色所在的位置,并且在整个动画播放的过程中,角色的位置从未发生过变化,角色身上绑的Capsule Collider也完全不会移动,完全落在角色身后了。这是啥问题呢?这个问题在我使用Humanoid动画的时候木有出现啊,尝试再次恢复到Humanoid动画类型,确认了在Humanoid动画类型下确实不会出现这个位移闪回的问题,每个动画结束后,角色所在的位置就是动画结束时位置。 Mecanim-Generic-Rig-Apply-Root-Motion-Error 搜索良久最终找到了解决方法,其实只需要在导入动画的时候指定好动画骨骼的根节点就OK了。  

Generic-FBX-Import-Rig-Setting Humanoid-FBX-Import-Rig-Setting

 

 

 

 

 

咱们对比一下这两个设置的选项,其中Humanoid动画类型导入时,根本就不需要设置Rig的根节点,而Generic动画就需要设置,而且默认设置是none,所以需要手动指定为模型对应骨骼的根节点。

看来Unity动画支持Apply Root Motion这个特性的实现机制就是根据骨骼在动画中的位移在引擎内进行计算滴,如果我们选择使用Humanoid动画的话呢,肯定需要设置一个人形的骨骼Avatar信息,这个Avatar信息中就会包含骨骼各个节点的信息,其中当然也包含了根节点(或者说已经不需要根节点了,因为所有关键的骨骼信息都会映射到Avatar信息上)。而对于Generic动画呢,Unity自身并不清楚骨骼之间的关系,而Apply Root Motion这个特性就是根据骨骼位移自行计算的,那么就需要我们手动地指定动画使用的骨骼的根节点了,根据根节点在动画中的位置变化就可以动态计算出来对象在场景中实时的位置了。

下图就是修改Root Node设置之后动画播放时的效果了,Capsule Collider也实时跟着动画的播放改变位置了。

Generic-Apply-Root-Motion-1 Generic-Apply-Root-Motion-2

2017-07-11 14:13:13 Mogoson 阅读数 1374

MGS-PathAnimation

概述

Unity3D 制作路径动画 插件包。

需求

  • 创建,编辑路径锚点;
  • 依据路径播放位移动画。

方案

  • 利用AnimationCurve实现基于锚点的平滑路径。

实现

  • 扩展编辑器,辅助创建,编辑路径瞄点;
  • VectorCurve.cs:三维空间动画曲线;
  • Path.cs:依据锚点创建平滑路径;
  • PathAnimation.cs:依据路径播放位移动画。

案例

“MGS-PathAnimation/Scenes”目录下存放简易演示案例,供读者参考。

源码

源码托管地址

2019-04-23 16:59:45 cjc52294 阅读数 621

接受目前的项目的时候,游戏角色已经有一套完整的动作动画以及逻辑。但是由于逻辑过于凌乱,并且用了新的骨骼,动画也重新由外包发了一份,所以我重新导入了所有的动画并且重写了角色的动作逻辑。

默认导入的FBX动画是 Generic 类型的,对于动画只能调节 循环 相关(以及下面一个我不知道做什么用的选项)。

由于外包动作制作不规范,有一定的位移和角度偏差量,我直接改成了 Humanoid 对这些偏差量进行调节。

之后就使用了这套动作动画大概两个月。制作人一直不太满意这个跳跃,最近招了新的动作兄弟,所以就改了新的跳跃动作。

新的动作给我之后,跑进逻辑里发现在跳跃结束的时候发现人物向后位移了一小段才回到 idle。

交流之后从动作兄弟那里知道,现在基本不使用 Humanoid 制作动画。另外我们一直以为这个回到 idle 的位移是我们的问题,花了两天在自己身上找原因,直到突然想起来看 idle 的 FBX 文件,发现是外包给过来的 idle 动画中人物并不在原点上。动作哥们把 idle 动画修改回原点之后一切恢复正常。

Unity3D动画系统(一)

阅读数 208

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