Unity模型动画学习笔记

1.模型动画的类型:目前常用的就两种,Generic和Humanoid,前者普遍适用于各种模型,但灵活性不高,后者只适用于人形动画,但灵活性高

先说Generic,非人形的模型我们一般选择该选项,然后在AvatarDefinition中可以选择生成Avatar(若该模型有自己的模型动画)也可以不生成使用其它相同骨骼的Avatar(常常用在该模型没有自己的模型动画但却想要使用其它相同骨骼结构模型的动画),这里对骨骼结构相同的要求是非常严格的。

Avatar文件存储的是骨骼映射的相关信息,Generic模式下就是按照相应模型的骨骼生成对应的Avatar文件,利用这种文件就可以控制与其匹配的骨骼的动画,而Humanoid略有不同。

再详细说下上面使用其它模型Avatar的情况,使用了其它模型的Avatar之后需要在Animator中的Avatar上使用相同的Avatar,状态机也需要使用和Avatar原模型相同的状态机,然后当前无动画模型就可以使用相同骨骼结构的有动画模型的动画了。

这里关于为什么能使用其它模型的动画,我理解的是Animator在有Avatar和相应的动画的情况下是直接对操控骨骼做动画的,也就是模型的外表反而没有那么重要,两个模型骨骼相同就可以播放相同的动画了。

做过3D游戏开发的朋友应该知道动画状态机在控制3D模型动画的播放时也不是非要设置Avatar不可的,而这种情况我的理解是动画状态机只有在有Avatar的情况下才会检测是否有相应匹配骨骼的动画,然后直接利用Avatar播放动画,没有的情况下是会直接检测动画是否和模型匹配(这里的检测包括但不限于骨骼),匹配就可以播放,不匹配则不能播放。

然后是Humanoid,Humanoid与Generic的不同就在于Unity提供了一套中介骨骼,Avatar存储的是模型骨骼与中介骨骼的映射信息(Generic下存储的是与自己的骨骼的映射),且这个Avatar是可以编辑的,因为有中介骨骼的存在,所以两个模型的骨骼结构哪怕不严格相同,只要都设置为了Humanoid类型,然后都有一个自己的骨骼与中介骨骼的映射信息,那么动画就可以共享了。

再说下Animator的设置,状态机需要使用有动画模型的,Avatar使用自己的就好,因为中介骨骼的动画已经有了(借助有动画模型的Avatar),所以就可以以中介骨骼的动画为参照,来实现自己模型骨骼的动画了,Avatar起到桥梁的作用。

2.Animator的参数,Controller和Avatar就不用细说了

Apply Root Motion,是否让根节点(指骨骼的根节点)的运动应用于每一帧,简单说就是如果动画本身带有位移,勾选后在动画播放时也会带有位移,没有勾选则只是原地播放动画

Update Mode:Normal是在Update中更新,受到Time.timeScale的影响,Animate physics是在FixedUpdate中更新,Unscaled Time也是在Update中更新,但不受Time.timeScale的影响

Culling Mode:Always Animate,总是停止动画的播放,Cull Update Transform,在Animator不可见时,会限制一些功能,具体请看

https://docs.unity3d.com/ScriptReference/AnimatorCullingMode.CullUpdateTransforms.html

Cull Completely,在Animator不可见时停止动画的播放

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章