MecAnim的动画融合功能

  我(阿赵)之前写了一个简单的MecAnim的入门教程,似乎受到了一些朋友的关注。其实MecAnim除了有状态机和动画分享功能以外,还有一个比较重要的功能,就是动画融合。

        什么是动画融合?举个例子,就是你有一个人物跑步的动画,又有一个开枪射击的动画,那么你就可以把这两个动画融合成一个一边跑步一边射击的动画了。动画融合其实是很基本功能需求来的,之前用Bigworld引擎的时候,那个动画融合是很细致的,甚至每一根骨头都可以指定它们对于某个动画的权重。在之前Unity也有这样的功能,是把不同的动画放在不同的层,然后调节他们之间的权重。不过那个是纯代码控制的,没有可视化界面的。这次的MecAnim的动画融合是有全可视化的界面编辑的。

        由于很简单,我就不写出具体的过程了,只说一下简单的步骤。

        首先,我们还是像之前那样,把需要的动画先导进来。比如我这里是拿了一个之前做的高达模型,分别做了站立、跑步、拿武器(光剑、镭射枪、加农炮三种),各种武器的手持动作和攻击动作,还有盾牌的手持动作。

        这里我们要分析一下了,这么多的东西,我们大概可以分成几个类别:

1、全身动画类,比如站立、跑步、跳跃。

2、右手动画,比如各种武器的手持动作,拿武器的动作,攻击动作。

3、左手动画,这里就只有手持盾牌的动作了。

4、其他动作,一些附加的动作,或者有特殊需要的脚部动作等。

        于是,我们就可以根据这些类别来增加需要的动画层。我这里只分了三层:

MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵
Base Layer是基础层,不能设置身体蒙板的,也就是说,这一个层里面的动作都是影响全身的。
 
下面的right和left层就是右手和左手的动画的层了。用这个分层,我们就要先生成2个BodyMask来指定这些层里面的动画会影响那些骨骼: 
MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵
 
新建两个Avatar Body Mash,分别命名为Right和Left: 
MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵
这是右边的,由于武器的操作动画比较复杂,很多都牵连了身体躯干和头部,所以我除了把右手指定了,还把躯干和头部也指定了。

 

MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵
这里是左边,由于我只有持盾的动作,所以只影响了左手和左手臂。
 
然后我们把这两个Body Mask指定给左手右手的层,这里的动画可以选择是覆盖Base层的还是叠加Base层的,可以根据需要来选择。
MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵
  
最后的事情就简单了,像之前的做法一样,把动画拖到相应的层里面,把他们根据需要连接起来,设定转换的条件,等等。
我这里用了Speed来控制跑步和站立动画的切换,然后用WeaponID来控制了武器的转换,用Fire来控制武器攻击动画,还有Shield来控制是否使用盾牌。 
MecAnim的动画融合功能 - 阿赵 - 有爪的小羔羊阿赵

 

这样,几个层的动画就可以根据需要融合起来一起播放了,你可以一边跑步一边挥剑,或者手持盾牌的开炮,等等。

这里需要注意几个问题的:

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会变得更好吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值