zoukankan      html  css  js  c++  java
  • Animator Override Controller学习及性能测试

    本文由博主(YinaPan)原创,转载请注明出处: http://www.cnblogs.com/xsln/p/Animator_Override_Controller.html

    一、Animator Override Controller简介:
      动画覆盖器是一类asset,它允许你扩张已经存在的动画控制器,用特定的animations,但是需要保留原始的结构、参数和逻辑;

    这就允许你创建同一个基础状态机的多个变种,这些变种使用不同的animations。

      例如:你有一系列的npc生活在游戏中,他们有自己的独特走、idle、坐等animations,创建一个基础动画控制器,包含所有种类npc的逻辑,

    你就可以创建一个override为每一种NPC,然后用他们各自的animation去填充;

    二、制作方法:

    图标:带+号为Override Controller

    1、Create选择Animator Override Controller

    2、修改名字为M2_P01

    3、将原来的AnimtorController拖到Controller内,即制作完成!

    三、使用及this[]的性能测试

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class AnimatorOveridePerformance : MonoBehaviour {
     5     public bool m_test = true;
     6     Animator m_animator = null;
     7     AnimatorOverrideController m_Old = null;
     8     AnimatorOverrideController m_New = null;
     9 
    10     // Use this for initialization
    11     void Start () {
    12         m_animator = GetComponent<Animator>();
    13         m_Old = new AnimatorOverrideController();
    14         m_New = Resources.Load<AnimatorOverrideController>("Packages/ArtWorks/Player/M2/M2_P04/M2_P04");
    15         Debug.LogError(m_New);
    16         m_Old = (AnimatorOverrideController)m_animator.runtimeAnimatorController;
    17         if (null != m_New) {
    18             Debug.LogError(m_Old["P01Attack01"]);
    19             Debug.LogError(m_Old["P01Attack02"]);
    20             m_Old["P01Attack01"] = m_New["P04Attack01"];
    21             m_Old["P01Attack02"] = m_New["P04Attack02"];
    22             Debug.LogError(m_Old["P01Attack01"]);
    23             Debug.LogError(m_Old["P01Attack02"]);
    24         }        
    25     }
    26 
    27     void Update() {
    28         Profiler.BeginSample("Update");
    29         if (m_test && m_New) {
    30             Profiler.BeginSample("this[]");
    31             m_Old["P01Attack01"] = m_New["P04Attack01"];
    32             m_Old["P01Attack02"] = m_New["P04Attack02"];
    33             Profiler.EndSample();
    34         }
    35         Profiler.EndSample();
    36     }
    37 
    38 }
    View Code
    测试结果:
         单次取和设置消耗约为0.5~1ms左右;
  • 相关阅读:
    js中关于undefined值的判断
    解决flexpaper搜索文字时不能高亮的问题
    计算出当月还剩下几天
    仿新浪微博返回顶部的js实现(jQuery/MooTools)
    使用Javascript计算时间差和计算日期加天数后的日期值
    小tip:iframe高度动态自适应
    JQuery之ContextMenu(右键菜单)
    JS的split函数用法
    jquery context menu用法
    jQuery实现搜索关键字自动匹配提示方法
  • 原文地址:https://www.cnblogs.com/xsln/p/Animator_Override_Controller.html
Copyright © 2011-2022 走看看