本文由博主(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 }
测试结果:
单次取和设置消耗约为0.5~1ms左右;