博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Animator组件关闭再打开后参数丢失问题
阅读量:6259 次
发布时间:2019-06-22

本文共 2824 字,大约阅读时间需要 9 分钟。

问题如下,因为再激活Animator时,它会重置一次,参数也会丢失

 

这个问题一直存在,论坛给出的解释是把参数缓存下来,在激活时重置

 

 

我把论坛的脚本修改了一下,在需要关闭GameObject时添加该脚本,再次打开GameObject时会自动删除,即可解决参数丢失问题

//Modify from: http://answers.unity3d.com/questions/919995/parameters-and-states-of-animator-reset-on-objects.htmlusing UnityEngine;using System.Collections.Generic;public class AnimParamRecover : MonoBehaviour{    class AnimCacheParam    {        public AnimatorControllerParameterType type;        public string paramName;        object mData;        public AnimCacheParam(Animator anim, string paramName, AnimatorControllerParameterType type)        {            this.type = type;            this.paramName = paramName;            switch (type)            {                case AnimatorControllerParameterType.Int:                    this.mData = (int)anim.GetInteger(paramName);                    break;                case AnimatorControllerParameterType.Float:                    this.mData = (float)anim.GetFloat(paramName);                    break;                case AnimatorControllerParameterType.Bool:                    this.mData = (bool)anim.GetBool(paramName);                    break;            }        }        public object getData()        {            return mData;        }    }    Animator mAnimator;    List
mParamsCacheList; bool mIsDisable; void Awake() { Record(); } ///
/// Recovery. /// void OnEnable() { if (mIsDisable) { mIsDisable = false; } else { return; } Recovery(); Destroy(this); } void OnDisable() { mIsDisable = true; } [ContextMenu("Manual Record")] public void Record() { mParamsCacheList = new List
(); mAnimator = GetComponent
(); for (int i = 0; i < mAnimator.parameters.Length; i++) { var p = mAnimator.parameters[i]; var animParam = new AnimCacheParam(mAnimator, p.name, p.type); mParamsCacheList.Add(animParam); } } [ContextMenu("Manual Recovery")] public void Recovery() { foreach (var param in mParamsCacheList) { switch (param.type) { case AnimatorControllerParameterType.Int: mAnimator.SetInteger(param.paramName, (int)param.getData()); break; case AnimatorControllerParameterType.Float: mAnimator.SetFloat(param.paramName, (float)param.getData()); break; case AnimatorControllerParameterType.Bool: mAnimator.SetBool(param.paramName, (bool)param.getData()); break; } } mParamsCacheList.Clear(); }}
AnimParamRecover

 

转载地址:http://xixsa.baihongyu.com/

你可能感兴趣的文章
iis网站发布相关问题
查看>>
信息安全实验四:information-security
查看>>
【CF1141E】Superhero Battle
查看>>
ssh登录一段时间后断开的解决方案
查看>>
【BZOJ3534】【Luogu P3317】 [SDOI2014]重建 变元矩阵树,高斯消元
查看>>
Ubuntu常用命令大全
查看>>
ScheduledExecutorService 定时任务,线程
查看>>
《C++ Primer Plus》读书笔记之三—循环与关系表达式
查看>>
vueJs2.0学习笔记(三)
查看>>
run in thread
查看>>
[HNOI2019]校园旅行
查看>>
vue实现菜单切换
查看>>
Java Web学习总结(28)——Java Web项目MVC开源框架SSH和SSM比较
查看>>
Maven学习总结(30)——Maven项目通用三级版本号说明
查看>>
如何提高iOS开发技能
查看>>
cocos2d-x HelloWorld 代码一撇
查看>>
2015.4.17专线割接
查看>>
map持久化类 Properties;对象序列化 ObjectOutputStream
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
ubuntu RPLIDAR A2的使用
查看>>