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数据,这样子就不用历遍了。
文章图片
文章图片
文章图片
如果有大佬有更好的办法可以留言 ,谢谢啦。
推荐阅读
- EditText默认不获取焦点弹出键盘
- whlie循环和for循环的应用
- 【实用教程】4种获取无水印视频素材的方法
- 插件化无法获取或找到.so文件
- 获取知识的门槛
- 提取ipa|提取ipa 包内资源
- 从某医院副院长拒不戴口罩被保安视频曝光事件看当前物业管理水平
- SpringBoot|SpringBoot 属性配置中获取值的方式
- django|django 获取用户的域名
- [mysql获取当天|[mysql获取当天,昨天,本周,本月,上周,上月的起始时间]