内容是看B站看到的一个极客学院的教学视频,想写下来帮助自己记忆和方便查阅,如果想了解更多请进入B站搜索:【极客学院】Unity3D工程师 初级+中级+高级+资深工程师
动画分层主要使用Animator的Layers来实现
每一层的动画都有独立的空间,动画设置好后可以同时播放,下面的层可以有更高的优先级。
每一个层里都有一个设置按钮,可以设置当前动画,比如weight动画的权重,如果每层都设置为一样的数,那么同时触发时下面的层优先播放。
那么如何实现动画的分离,比如跑动的时候手部可以招手,或者做一些其他的动作。这要使用Mask来实现,Asset窗口创建常见一个Avatar Mask,设置如下:
这样设置的一个mask可以只播放这层的手部动画,我们是人形动画,如果不是人形或者是需要精细的调整,可以使用Transform来做具体的调整,这里我们简单的设置成只要手部的动画。把这个mask赋值给我们新建的Layers。
设置好后,就可以实现在播放Base Layer动画的时候播放New Layer层的动画。
多层动画的设置
主要是设置Layers的设置窗口
Weight 是动画的权重,为1可以完全播放,为其他的值的时候是与上一层混合播放的。
Mask 设置动画的遮罩。
Blending 有两种模式Override和Additive,覆盖和添加,选择Additive的时候可以和Weight来配合实现动画的混合播放效果。
IK Pass 是否启用反向动力学,我们前面说的两种脚本中都有与IK有关的回调函数,勾选这个之后才可以正常使用那些函数。
Sync 勾选上后可以复制一个Layers,如下:
我们复制了Source Layer,他们两个完全一样,可以更改这层动画的内容,比如把左手的动画镜像成右手的。这两个层的动画同时播放的时候假如,动画时间不一样可以使用Timing来控制动画匹配哪个层的动画时间。勾选上Timing后就会将另一层的动画加快或者放慢来适应本层的动画。Weight也会影响效果,如果Weight等于0那么不会有任何效果。
这些属性都可以通过Animator类的函数在脚本里面控制,比如Weight的值等。