Unity3D--Mecanim动画系统之动画分层(Layers)
为什么动画中会有层的概念
就目前来说:使用状态机的单一层动画就已经可以满足日常开发需要。那么为什么出现层的概念呢?
先来几张图,对比一下,你就会发现哪里好。
第一:分离动画组
第二:规范动画制作
第三:提供更丰富的动画制作
Ps:其实跟我们的动画融合树差不多。。。
如何使用层动画?
- 添加动画层
注意:同一时刻我们只能执行一个层的动画片段。
- 添加参数
注意:参数是执行动画的触发条件
- 给第二层的触发线绑定参数
绑定的过程中,其实我们会发现New State就代指第一层动画组,而参数帮助我们过渡了层。当然动画是显示不出来的,但是动画片段确实执行了。 - 新建一个 AvatarMask,新层的 Mask 的位置,设置上这个 AvatarMask;
注意点
在动画层之间切换的过程中,其实主要是通过参数的满足与否来进行层动画执行操作,但是有一个前提就是层的权重,如下图:
如果不设置权重,你会发现即便分好层,而且在状态机中发现动画执行了,但是界面的角色并没有显示出来。
前面的分享已经提到过使用代码控制动画的参数,这里如何通过代码设置权重呢?
[SerializeField]
private Animator ani;
void Start () {
// 表示设置动画第二层的权重为1
ani.SetLayerWeight(1, 1);
}
为了让融合之后的动作互不干扰,上方播放挥手动作,下身播放行走动作。还必须对新建立的Avatar Mask文件进行设置,如下图。