问一下,animator切换状态后获取状态的问题
unity3d吧
全部回复
仅看楼主
level 1
就是切换状态后
// 运行 Attack1 状态
animator.SetInteger(AnimatorConst.STATE, (int) EnemyAnimatorStateEnum.Attack1);
animatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
这样直接获取animatorStateInfo和过一段时间后调用animator.GetCurrentAnimatorStateInfo(0)
Debug.Log(animatorStateInfo.Equals(animator.GetCurrentAnimatorStateInfo(0))); //返回的false
获取的animatorStateInfo对象不一样。
请问怎么避免这样的问题啊?
2022年08月01日 11点08分 1
level 6
每次调用完动作执行animator.update(0f),再去获取当前播放的动作
2022年08月01日 13点08分 2
加上这一句还是没有效果,切换后马上获取和等会获取的结果不是一个对象
2022年08月01日 14点08分
但是我用IsName试了一下都是切换的那个状态,但是不是一个对象
2022年08月01日 14点08分
使用马上获取的使用normalizedTime得到的是错误的信息,过会得到的是正确的normalizedTime
2022年08月01日 15点08分
level 11
这个啥StateInfo是个结构体呀,你每次获取的都会给你生成一个新的对象怎么可能一样。
所以说值类型只能比较某个特征而不是内存的引用,比如说可以通过StateInfo里的nameHash来判断是不是同一个State
2022年08月01日 22点08分 3
不是过一段时间后获取的animatorStateInfo,是同一个对象。 切换状态后马上获取几遍也是同一个对象,但是马上获取和过一段时间获取的不是同一个对象。
2022年08月02日 03点08分
@heaven天剑客 你在Animator更新State前重复获取两次只能得到两个参数一样的对象。这里不应该用自带Equals方法比较。参考下值类型和引用类型的区别
2022年08月02日 03点08分
@NEKO电台 看了下源码确实是结构体,那就是我的用法错了应该实时获取的。
2022年08月02日 04点08分
@NEKO电台 请教一下,切换状态后直接调用animatorStateInfo.normalizedTime获取的值大于1,要等会才从0开始是因为什么原因啊。 想要用这个来确定动画运行的过程,前面用动画时间来写第一次调用动画会快一些。
2022年08月02日 04点08分
1