u3d 获取当前Animator的State信息以及修改

u3d没有提供支持获取或者修改State的函数,但是我们有曲线实现的方法。

Let us go!

先放一下总的代码
引用UnityEditor.Animations.

 AnimatorControllerLayer layer =((AnimatorController)animator.runtimeAnimatorController).layers[0];//获取这个Animator组件上对应某一层的AnimatorController资源
        AnimatorStateMachine sm = layer.stateMachine;  //获取层状态机
       ChildAnimatorState[] ams = sm.states;//获取该层状态机的子状态机
        ///以上代码只需获取一次,然后保存就可以
        //下面的代码可以封装为一个函数,反复使用
        for (int i=0;i

具体方法代码上也说的很清楚了,就是利用RuntimeAnimatorController是AnimatorController的父级,但是实际上runtimeAnimatorController是AnimatorController的类型,的一个强制转换 从而获取到AnimatorController对象 ,进而进行修改。
但是这个方法有缺陷

1.如果修改了,那么所有引用了这个AnimatorController的Animator都会被修改
2.这个修改不会自动恢复也就是改了就固定了
3.如果动画多容易耗性能
解决方法

1:
要对单独某个animator的修改,你可以在刚刚的基础上,把他AnimatorController 克隆成另外一个实例再修改 然后替换掉该Animator的AnimatorController,这样子就不会影响到原来的AnimatorController。
2:可以在修改之前保存原来的值,在游戏结束时恢复回去。
3:如果你有Power,找Unity谈一谈叫他们加上依靠名字获取State数据,这样子就不用历遍了。在这里插入图片描述u3d 获取当前Animator的State信息以及修改_第1张图片u3d 获取当前Animator的State信息以及修改_第2张图片如果有大佬有更好的办法可以留言 ,谢谢啦。

你可能感兴趣的:(unity的常见问题)