Unity - Animator Layer Weight,Mask,Blending实现动作覆盖,一边挥手一边跑步,上下半身动画覆盖播放
Project Source
Animator_层级覆盖遮罩左右手动画_Layer_Override_AvatarMask_HandwaveLeftOrRight 提取码: m2xw
Animator状态机参数
Base Layer只有简单的Idle与Move的状态动画
HandwaveL Layer - 左手动画层
这里有几个技巧:
- 使用一个Empty(Clip留空)的状态,在这个Empty状态就不会影响其他层了
- Entry进入的默认状态为Empty,这样一开始就不影响其他状态
- 使用Any State来判断Transition进入Handwave
- Any State->Handwave的Transition使用handwaveL trigger就好了
- Handwave->Empty的Transition不使用任何条件就好,这样默认就会使用HasExitTime、ExitTime来决定(即,Handwave播放一遍完成时,就条件成立)
HandwaveL Layer的齿轮面板属性设置
主要设置Weight,Mask,Blending
- Weight:1(对其他层的动画的影响权重值,1:完全影响(如果Blending为Additive的话,那么会将所有层的Additive的Weight的值进行同时计算),0:完全不影响)
- Mask:HandWaveLMask(下面有图,我们只要保留左手绿色即可)
- Blending:Override(该层的动画将会覆盖其他的)
HandwaveL 其实是HandwaveR的镜像,减少FBX动画数据
HandwaveL Layer的AvatarMask
AvatarMask,红色是不生效的,绿色是将用上的动画关节
HandwaveR Layer - 右手动画层
HandwaveR Layer的齿轮面板属性设置
主要设置Weight,Mask,Blending
- Weight:1(对其他层的动画的影响权重值,1:完全影响(如果Blending为Additive的话,那么会将所有层的Additive的Weight的值进行同时计算),0:完全不影响)
- Mask:HandWaveRMask(下面有图,我们只要保留右手绿色即可)
- Blending:Override(该层的动画将会覆盖其他的)
这里有几个技巧:
与HandwaveL Layer的基本相同
HandwaveR Layer的AvatarMask
Runtime
最后我们运行场景,然后选中Animator的拥有者对象(GameObject),然后再打开Animator窗口
(Window->Animation->Animator),打开Paramters参数面板(Layers旁边),手动点击**"move"布尔值,“handwaveL”、"handwaveR"触发器来看看人物动画的左右手覆盖播放的情况