unity学习45:Animator 的动画层layer

目录

1 Animator 动画层layer

1.1 base layer 默认动画图层

1.2 每个图层layer里包含的内容

2 用layer进行动画的融合,类blend tree的效果

2.1 两个图层layer里包含的动作融合的效果

2.1.1 设置2个图层

2.1.2 因为权重的原因导致只播放base layer的,base layer默认权重=1

2.1.3 如果把 new layer的权重从0越调越大

2.1.4 测试效果

2.1.5 如果把 new layer的权重从0越调越大到1

2.2 总结:layer的优先级有2个(高优先级的遮盖低优先级的)

3 图层属性:权重

4 图层属性:blending 混合

5 图层属性:遮罩 mask

5.1 创建遮罩 Avatar mask

5.2 修改遮罩并挂到new layer上去

5.3 测试:让身体的不同部分,播放不同的动画


1 Animator 动画层layer

1.1 base layer 默认动画图层

  • base layer 默认动画图层
  • 可以新建图层

1.2 每个图层layer里包含的内容

  • 默认状态 state : entry   /  any state   /exit 
  • 其他状态 state

2 用layer进行动画的融合,类blend tree的效果

2.1 两个图层layer里包含的动作融合的效果

  • 这里动画的融合
  • 是融合2个layer内部的动作的效果。

2.1.1 设置2个图层

  • 除了默认的,再新建1个
  • 每个图层里只设置1个默认动作

2.1.2 因为权重的原因导致只播放base layer的,base layer默认权重=1

  • base layer默认权重=1
  • new layer默认权重=0  所以完全播放不了

2.1.3 如果把 new layer的权重从0越调越大

  • 如果把 new layer的权重从0越调越大
  • 那么,new layer的动作的成分就越开越大,可运行着unity边改边测试

2.1.4 测试效果

2.1.5 如果把 new layer的权重从0越调越大到1

  • 如果权重调整为1
  • 会覆盖,且滑步只播放高级的,权重低的动画放不出来
  • 就会发现 base layer的播放不出来了
  • 因为  W base layer = W new layer =1 ,权重相等了,但是new layer 在下方,优先级更高
  • 如果base layer是移动类的,移动角色就会发现 base layer播放不出来,角色滑步了

2.2 总结:layer的优先级有2个(高优先级的遮盖低优先级的)

  • layer优先级1:权重大小
  • layer优先级2:越在下面(越新建)的 layer 的优先级越高

3 图层属性:权重

见上面

4 图层属性:blending 混合

blending2个属性

  • override  覆盖
  • additive   增加,同时生效?

5 图层属性:遮罩 mask

  • 默认没有遮罩

5.1 创建遮罩 Avatar mask

  • 直接右键创建遮罩mask 
  • Avatar mask

5.2 修改遮罩并挂到new layer上去

5.3 测试:让身体的不同部分,播放不同的动画



 

Unity中,为了给Animator的Base Layer添加自定义脚本,你需要创建一个C#脚本,并将其关联到动画控制器。以下是步骤: 1. **创建脚本**: 首先,新建一个C#脚本,例如名为`CustomBaseLayerScript.cs`。在这个脚本中,你可以编写处理动画状态机逻辑的方法。 ```csharp using UnityEngine; using UnityEngine.Animations; public class CustomBaseLayerScript : MonoBehaviour { public Animator animator; // 在Inspector中链接Animator组件 void Start() { if (animator != null) { // 获取Base Layer AnimatorStateInfo baseLayerState = animator.GetCurrentAnimatorStateInfo(0); // 检查是否已添加至Base Layer if (!baseLayerState.IsName("YourBaseLayerName")) // 替换"YourBaseLayerName"为你想要的名称 { // 添加脚本所控制的行为 animator.AddBehaviour(this); } } } // 根据需要定义方法,如更新逻辑、事件处理等 public void YourCustomMethod() { // ... 实现你的自定义功能 } } ``` 2. **将脚本附加到Animator**: - 将上述脚本保存并导入项目中。 - 打开你想要添加脚本的Animator组件,在Inspector面板上找到“Behaviors”部分。 - 点击"+"按钮,从Asset浏览器中选择刚创建的脚本文件,然后选中`Add Component to Layer`选项,最后选择Base Layer。 3. **使用自定义脚本**: 现在,每当Base Layer进入`YourBaseLayerName`状态时,`CustomBaseLayerScript`中的方法就会被调用。你可以根据需要修改或扩展这个脚本来定制Base Layer的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值