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

【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信息以及修改
文章图片
u3d 获取当前Animator的State信息以及修改
文章图片
u3d 获取当前Animator的State信息以及修改
文章图片
如果有大佬有更好的办法可以留言 ,谢谢啦。

    推荐阅读