我(阿赵)之前写了一个简单的MecAnim的入门教程,似乎受到了一些朋友的关注。其实MecAnim除了有状态机和动画分享功能以外,还有一个比较重要的功能,就是动画融合。
什么是动画融合?举个例子,就是你有一个人物跑步的动画,又有一个开枪射击的动画,那么你就可以把这两个动画融合成一个一边跑步一边射击的动画了。动画融合其实是很基本功能需求来的,之前用Bigworld引擎的时候,那个动画融合是很细致的,甚至每一根骨头都可以指定它们对于某个动画的权重。
由于很简单,我就不写出具体的过程了,只说一下简单的步骤。
首先,我们还是像之前那样,把需要的动画先导进来。比如我这里是拿了一个之前做的高达模型,分别做了站立、跑步、拿武器(光剑、镭射枪、加农炮三种),各种武器的手持动作和攻击动作,还有盾牌的手持动作。
这里我们要分析一下了,这么多的东西,我们大概可以分成几个类别:
1、全身动画类,比如站立、跑步、跳跃。
2、右手动画,比如各种武器的手持动作,拿武器的动作,攻击动作。
3、左手动画,这里就只有手持盾牌的动作了。
4、其他动作,一些附加的动作,或者有特殊需要的脚部动作等。
于是,我们就可以根据这些类别来增加需要的动画层。我这里只分了三层:
这样,几个层的动画就可以根据需要融合起来一起播放了,你可以一边跑步一边挥剑,或者手持盾牌的开炮,等等。
这里需要注意几个问题的:
1、这些后来增加的层的权重在运行的时候默认是0的,也就是没有影响,需要自己在初始化的时候或者特定需要的时候设定层的权重。(使用animator.SetLayerWeight)
2、增加的这些动画包含的元素(骨骼、mesh模型等)最好保持一致,如果出现某个动画多了点其他动画没有的骨骼或者网格,虽然不影响运行,但是会有报错的。
3、动画之间的过渡时间长短是可以调节的,可以根据情况来微调过渡效果。
随着Mecanim的出现,Unity正一步一步的摆脱简陋,向正常的游戏引擎迈进了,这是非常好的事情。不过这些功能都还是处于非常初级的阶段,有很多的bug,如果是做项目,建议还是不要使用。
比如Mecanim方式的动画导入是可以有脚部IK效果和根据动画影响人物的位移旋转的。(这些功能正常的引擎比如bigworld都会有)但Unity明显是没有做得很好,而导致了你在不想动画影响人物位移旋转的时候,它还是动了(就算把Root Transform Position和Root Transform Rotation选择了Bake into pose后,某些动画还是会乱动)。而动画之间的过渡效果还是比较的生硬,有时候会出现切换两个动作的时候由于跨度大而闪动的情况。
期待新版的出现吧,现在阿赵用着的是4.0版本,很多功能都是首次出现,希望下一次的版本Unity会变得更好吧。