unity之Mecanim动画系统学习(6)
动画分层
WHY?
动画分层可以解决在同一人物中不同动画的播放问题,具体而言就是吃鸡里面,任务下半身的移动和上半身的各种操作。
Avatar Mask——动画混合
首先,我们在场景添加任务,给他添加动画以及Animator Controller
然后根据需求发现我们要让下半身动作和上半身动作分开,那我们新建一个动画层Another Layer
将weight权重设为1
然后添加本层的动画逻辑,但是此时的Idle不需要添加动画了
通过脚本控制动画的播放,脚本这里就不列出了,大家根据自己需求来
当运行游戏时发现,Base Layer动画播放后接着播放Another Layer动画,那么Base Layer动画就会停止,也就是覆盖了Base Layer的动画,那么此时我们需要创建一个Avatar Mask来表示我们只希望播放动画的部分,也就是说,虽然我的动画文件是整个人物的动画,但是,我只希望播放一部分(比如手部)的动画,那我就通过Avatar Mask来把人物的其他部位的动画给遮蔽。
红色代表遮蔽,绿色代表播放
这样一来,手部的动画就可以和下半身动画一起播放,所以Avatar Mask也叫动画混合
最后将Avatar Mask拖入Another Layer中的Mask即可
动画层的属性说明
Weight
动画层的权重,默认的Base Layer必须为1。如果设置为0则当前层的动画不会播放,1则会播放,0-1之间会采用类似融合的情况来播放动画,比如之前的招手的例子,如果设置为0.5则招手动画播放时手部只会抬到脖子附近,即播放的程度。
Mask
动画混合,上方已经详解。
Blending
动画混合方式:
Override:覆盖,表示当前层的动画会覆盖掉其它层的动画,比如招手播放时右手就不能播放其它的动画了;
Additive:添加,表示当前层的动画的量添加到其它层的动画,比如招手播放时,手部奔跑或站立的甩动也会保留;
Sync
开启了该功能后会多出一些选项,如下:
我们可以将该功能看做复制的功能。
Source Layer:指定当前层是哪个层的副本,设定后当前层的状态会和指定层完全一致或完全同步,但是我们可以修改某一个状态的动画。
该功能提供的效果就是两个状态一致的层可以做出一些不同的调整。
Timing:当前层和Souurce层同一个状态使用的动画时间长度不一致时,不勾选复制的层按Source层的时间播放(效果就是复制层动画可能会变快或变慢,Source层动画播放速度不变),勾选则Source层按复制层的时间播放(效果就是Source层动画可能会变快或变慢,复制层动画播放速度不变)。
IK Pass:勾选了之后能够使用IK动画功能