问题如下,因为再激活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组件关闭再打开后参数丢失问题的更多相关文章

  1. Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错

    做后台管理系统时遇到的问题,关于tab关闭后再打开不显示,或者报错 我在新的tabpanel中加入了一个grid,当我关闭再次打开就会报错Cannot read property 'addCls' o ...

  2. Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)

    我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...

  3. java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理

    异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connect ...

  4. 点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决?

    点击按钮使用window.open打开页面后,再次点击按钮会再打开一个页面,如何解决? window.open("page1.html","win1"); 这句 ...

  5. 关于数据库一致改关闭下redo日志文件丢失的处理办法的总结

    数据库一致性关闭下redo日志文件丢失的处理办法(归档和非归档都行) 1. inactive log  在一致性关闭后删除重启时可以在mount下(不丢失数据) alter database clea ...

  6. 工控随笔_03_西门子_Step7项目打开后CPU显示问号解决方法

    我们在利用西门子的S7-300/400 PLC的编程软件Step7的时候会出现下面如图所示的问题. 在打开项目的时候,我们会在Simatic Manager里面看到CPU以及一些其他一些组件显示问号. ...

  7. vue 路由传参中刷新页面参数丢失 及传参的几种方式?

    在页面跳转中,我通过路由传参,结果发现页面参数丢失了.路径返回了根目录.... 1. 先说下路由传参的几种方式吧? 比如:<div v-for="item in items" ...

  8. Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

    声明:该博文以socket中,关闭输出流为例进行说明. 为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutpu ...

  9. vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题&vue路由可选参数

    vue  通过 name 和 params 进行调整页面传参刷新参数丢失问题 router.js: export default new Router({ routes: [ { path: '/', ...

随机推荐

  1. eclipse Project facet Java version 1.8 is not supported.

    在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持.说明项目是其他版本jdk编译的, ...

  2. Leetcode: Perfect Rectangle

    Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...

  3. Lintcode: Maximum Subarray Difference

    Given an array with integers. Find two non-overlapping subarrays A and B, which |SUM(A) - SUM(B)| is ...

  4. SQL 数据库 子查询、主外键

    子查询,又叫做嵌套查询. 将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询. 子查询有两种类型: 一种是只返回一个单值的子查询,这时它可以用在 ...

  5. iis access denied, you do not have permission.

    this kind of problems are usually caused by some IIS configuration issues, like application pool set ...

  6. WM (Constants)

    Create page WM (Constants)   Summary WM_* Constants and their definitions or descriptions and what c ...

  7. openssh设置免密码登录远程服务器

    主机 host | 远程机器 server 目标:从host登录到server,免密码输入 host机器: ssh-keygen -t rsa 在~/.ssh/中会生成两个文件 id_rsa.pub和 ...

  8. 夺命雷公狗---微信开发58----微网站之jquery_mobile之控件介绍

    我们上一节课里面介绍了基本的jqm是如何用的了,那么这一节课我们就开始玩玩他的控件 1...布局网格 <!DOCTYPE html> <html> <head> & ...

  9. Power Gating的设计(概述)

    Leakage power随着CMOS电路工艺进程,功耗越来越大. Power Domain的开关一般通过硬件中的timer和系统层次的功耗管理软件来进行控制,需要在一下几方面做trade-off: ...

  10. MOPSO 多目标例子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...