U3L18-2——动画分层和遮罩
U3L18-2——动画分层和遮罩
本章代码关键字
1 | animator.GetLayerIndex() //通过层级名字获取索引 |
动画分层的主要目的
动画分层的作用
游戏中会有这样的需求
人物健康状态时播放正常动画
人物非健康状态时播放特殊动画
比如血量低于一定界限,人物的大部分动作将表现为虚弱状态
我们可以利用动画分层来快速实现这样的功能
动画分层和动画遮罩结合使用
3D游戏中我们常常会面对这样的需求
人物站立时会有开枪动作
人物跑动时会有开枪动作
人物蹲下时会有开枪动作
从表现上来看光是开枪动作可能就有3种
如果要让美术同学做3种开枪动作费时又费资源
我们是否可以这样做
比如开枪动画只影响上半身
下半身根据实际情况播放站立,跑动,蹲下动作
通过上下半身播放不同的动画就可以达到动画的组合播放
动画分层的主要就是达到这两个目的
- 两套不同层动作的切换
- 结合动画遮罩让两个动画叠加在一起播放
提升动画多样性,节约资源
利用动画分层我们可以做到
- 上下半身播放两个动画进行组合,比如上半身扔炸弹,下半身待机移动蹲下
- 快速制作正常状态和受伤状态的动作切换
如何使用动画分层
- 新建一个动画层
- 设置动画层参数
- 在该层中设置状态机(注意:结合遮罩使用时默认状态一般为Null状态)
- 根据需求创建动画遮罩
分层参数相关
-
Weight:权重,当动画同时播放时,如果选择的是叠加状态,会根据权重决定叠加的比例
-
Mask:动画遮罩,该层动画全部都会受该遮罩的影响
可以单独编辑某个动画的遮罩
也可以写一个遮罩文件使该层动画全部受到影响,这个方法效果更好 -
Blending:混合方式
- Override:覆盖方式,播放该层动画时忽略其他层信息
- Additive:叠加方式,会和其它层动画叠加播放
-
Sync:是否同步其它层
主要用于直接从另一个层复制状态过来,在该层中进行修改
适用于比如正常状态下有待机走路跑步等等动作,
但是受伤状态下动作会改变,可以利用同步层方便我们进行编辑
选择后会多一个Source Layer表示你要复制哪一层的状态 -
Timing:当选中Sync同步其它层时,该参数激活
选中,会采用折中方案调整同步层上的动画时长(基于权重计算)
不选中,动画时长将使用原始层做为母版 -
IK Pass:反向动力学通道,如果要该层动画受到IK影响就必须要开启之后讲解IK的时候再讲解
代码改变权重
注意!该API使用动画层级的索引作为参数,可以通过名字来获取索引
获取层级索引
1 | animator.GetLayerIndex("MyLayer2") |
第一个参数是层级的索引,第二个参数是修改为何种权重
1 | animator.SetLayerWeight(animator.GetLayerIndex("MyLayer2"), 1f); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!