• 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来实现,如图所示
    在这里插入图片描述

  • 相关阅读:
    02Redis的命令行客户端和桌面客户端的下载和安装
    echarts-直角坐标系通用配置
    C语言【隐式类型转换】和【显式类型转换】
    【python绘图】Matplotlib绘图2维+3维(2D图像和3D图像)
    Vulnhub实战-prime1
    直方图,条形图,饼图
    网络安全(黑客)自学
    第09章 性能分析工具的使用【2.索引及调优篇】【MySQL高级】
    Hadoop面试问题总结
    【modbus协议】Modbus-TCP消息帧格式
  • 原文地址:https://blog.csdn.net/u010778229/article/details/126402462