Unity Animation锁定的属性无法修改数值

前言

Unity的Aniamtor使用后,里面绑定的属性就会被强制锁定,导致业务层无法做修改。属实有点难受,这篇文章就来分析下,对于锁定的属性,animator是如何处理的。

WriteDefaults

在这里插入图片描述
测试环境介绍:
在这里插入图片描述

cube上绑定animator,其中Test-4-1控制Cube4的Position为(0,10,0),Test-4-2控制Cube4的Position为(10,0,0),Rotation为(0,30,0)。Cube4的默认Postion为(50,50,50),Rotation为(0,0,30)。

属性绑定测试

我们将Aniamtor的默认状态设置为NewState(空状态,没有任何动作文件),运行游戏后,发现Cube4的Postion和Rotation都无法修改,Scale可以修改。设置成Test-4-1或者Test-4-2也是一样,说明Animator会上来将里面控制的所有属性进行锁定,跟动画片段无关。

WriteDefault的作用

上面我们知道了属性绑定是一次性绑定了所有属性,上面的例子中,控制了Postion和Rotation,但是Test-4-1只控制了Positon,那么在播放Test-4-1时,Rotation的数据如何赋值呢?我们分析下,此时Rotation的数据的来源有两处,第一处为:播放Test-4-1时,此时Rotaion的数据。第二处:Animator进行Bind时(一般情况下在每次被激活时),锁定所有属性时,Cube4的Rotation的数据,其实就是默认的数据。
如果我们勾选了WriteDefault,就使用第二处数据,没勾选则会使用第一处数据。
所以WriteDefault的含义就是,当动画播放时,如何处理那些当前动画片段不控制的但是被Animator的属性的数值。

多个Animator控制一个属性时,控制权归属

测试举例,在上个例子中(Aniamtor绑定在Cube上),我们在Cube4上加入动画控制器,其中Test-4-Only会控制,Cube4的Postion,Rotation,Scale.
在这里插入图片描述

同时播放Test-4-1(只控制Positon),和Test-4-Only。结果是Postion和Rotation由Cube上的Animator进行控制,Scale由Cube4上的Animator控制。
经过多次测试:当多个Animator控制一个属性时,此属性的控制权选择顺序为:1.UpdateMode:Normal=UnsacledTime>AnimatePhysics 2.由层级更高的Animator>层级低的Animator。

Timeline中的Animation的属性控制

在这里插入图片描述

Track相当于AnimatorController,运行时会锁定轨道上的所有属性。
在这里插入图片描述
1使用Default数据,2使用R1最后一帧的数据,3使用R3第一帧数据,4使用Default数据5使用R4最后一帧数据。具体使用哪个数据可以通过clip调整AnimationExtrapolation来实现,如图所示
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘培玉--大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值