Animator组件关闭再打开后参数丢失问题
问题如下,因为再激活Animator时,它会重置一次,参数也会丢失

这个问题一直存在,论坛给出的解释是把参数缓存下来,在激活时重置
http://answers.unity3d.com/questions/919995/parameters-and-states-of-animator-reset-on-objects.html
我把论坛的脚本修改了一下,在需要关闭GameObject时添加该脚本,再次打开GameObject时会自动删除,即可解决参数丢失问题
//Modify from: http://answers.unity3d.com/questions/919995/parameters-and-states-of-animator-reset-on-objects.html
using 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<AnimCacheParam> mParamsCacheList;
bool mIsDisable;
void Awake()
{
Record();
}
/// <summary>
/// Recovery.
/// </summary>
void OnEnable()
{
if (mIsDisable)
{
mIsDisable = false;
}
else
{
return;
}
Recovery();
Destroy(this);
}
void OnDisable()
{
mIsDisable = true;
}
[ContextMenu("Manual Record")]
public void Record()
{
mParamsCacheList = new List<AnimCacheParam>();
mAnimator = GetComponent<Animator>();
; 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
Animator组件关闭再打开后参数丢失问题的更多相关文章
- Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
做后台管理系统时遇到的问题,关于tab关闭后再打开不显示,或者报错 我在新的tabpanel中加入了一个grid,当我关闭再次打开就会报错Cannot read property 'addCls' o ...
- Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)
我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...
- java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理
异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connect ...
- 点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?
点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决? window.open("page1.html","win1"); 这句 ...
- 关于数据库一致改关闭下redo日志文件丢失的处理办法的总结
数据库一致性关闭下redo日志文件丢失的处理办法(归档和非归档都行) 1. inactive log 在一致性关闭后删除重启时可以在mount下(不丢失数据) alter database clea ...
- 工控随笔_03_西门子_Step7项目打开后CPU显示问号解决方法
我们在利用西门子的S7-300/400 PLC的编程软件Step7的时候会出现下面如图所示的问题. 在打开项目的时候,我们会在Simatic Manager里面看到CPU以及一些其他一些组件显示问号. ...
- vue 路由传参中刷新页面参数丢失 及传参的几种方式?
在页面跳转中,我通过路由传参,结果发现页面参数丢失了.路径返回了根目录.... 1. 先说下路由传参的几种方式吧? 比如:<div v-for="item in items" ...
- Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)
声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...
- vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题&vue路由可选参数
vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题 router.js: export default new Router({ routes: [ { path: '/', ...
随机推荐
- iOS 判断字符串中含有某个字符串 rangeOfString
//判断roadTitleLab.text 是否含有qingjoin if([roadTitleLab.text rangeOfString:@"qingjoin"].locati ...
- js方法和prototype
JS中的方法可以分为三类 1.对象方法 2.类方法 3.原型方法 例: function People(name) { this.name=name; //对象方法 this.Introduce=fu ...
- 转:python webdriver API 之分页处理
对于 web 页面上的分页功能,我们一般做做以下操作: 获取总页数 翻页操作(上一页,下一页) 对于有些分页功能提供上一页,下一页按钮,以及可以输入具体页面数跳转功能不在本例的讨论范围. .. ...
- 多边形和圆的相交面积(模板)hdu2892、hdu4404
area Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- nyist 626 intersection set
http://acm.nyist.net/JudgeOnline/problem.php?pid=626 intersection set 时间限制:1000 ms | 内存限制:65535 KB ...
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- oracle 新手遇到常见问题的解决办法
可能照成以下问题的原因也许有很多种,但是就小白而言,我只记录自己学习过程中遇到的所有的问题.希望对一些新手 小白们有所帮助. 原因是 sys 不是sysdba 用户,你要将其作为sysdba 用户登录 ...
- HDU 4512 吉哥系列故事——完美队形(LCIS)
Problem Description 吉哥这几天对队形比较感兴趣. 有一天,有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一 ...
- android waiting for debugger
在Studio开发环境中,使用真机开发经常会出现waiting for debugger,卡死不动了,让人很崩溃啊,现在我就总结下几种解决方法,希望能帮到出现同样情况的朋友! 问题出现及解决办法: 多 ...
- MVC4中给TextBoxFor设置默认值和属性
例如:(特别注意在设置初始值的时候 Value 中的V要大写) @Html.TextBoxFor(model => model.CustomerCode, new { Value=" ...