2017-05-09 26 views
-1
using System.Collections; 
using System.Collections.Generic; 
using System.Linq; 
using UnityEngine; 

[ExecuteInEditMode] 
public class AnimationCamera : MonoBehaviour 
{ 
    public string test; 
    public Camera animationCamera; 
    public Camera mainCamera; 
    private Animator _anim; 
    public List<AnimationClip> animations = new List<AnimationClip>(); 

    private void Start() 
    { 
     test = "daniel"; 
     animationCamera.enabled = false; 
     mainCamera.enabled = true; 
     _anim = GetComponent<Animator>();  
    } 

    private void Update() 
    { 
     _anim = GetComponent<Animator>(); 
     foreach (AnimationClip ac in _anim.runtimeAnimatorController.animationClips) 
     { 
      animations.Add(ac); 
     } 

     if (Input.GetKeyDown(KeyCode.C)) 
     { 
      animationCamera.enabled = !animationCamera.enabled; 
      mainCamera.enabled = !mainCamera.enabled; 

      if (animationCamera.enabled) 
      { 
       _anim.CrossFade("Animation_Sign", 0); 
      } 
      else 
      { 
       _anim.CrossFade("Animation_Idle", 0); 
      } 
     } 
    } 

    public IEnumerator PlaySignAnimation() 
    { 
     animationCamera.enabled = true; 
     _anim.CrossFade("Animation_Sign", 0); 
     yield return null; //new WaitForSeconds(animations[0]); 
     animationCamera.enabled = false; 
     mainCamera.enabled = true; 

    } 
} 

現在它會更新動畫列表並一直在編輯器中向列表添加相同的項目。 由於在編輯器中我會更新Animator窗口,我希望它每次向Animator窗口添加或刪除動畫片段時都會自動更新動畫列表。如何使用[ExecuteInEditMode]更新Update函數內的列表?

回答

1

它現在的方式是更新動畫列表,並且 將繼續在編輯器中向列表添加相同的項目。

簡單的解決方法是添加ac到動畫List只有當它不存在於動畫List存在。

變化:

foreach (AnimationClip ac in _anim.runtimeAnimatorController.animationClips) 
{ 
    animations.Add(ac); 
} 

foreach (AnimationClip ac in _anim.runtimeAnimatorController.animationClips) 
{ 
    if (!animations.Contains(ac)) 
    { 
     animations.Add(ac); 
    } 
} 

可能有其他的方法,但這種看上去很簡單。

編輯

至於檢查時的動畫片段被修改,您可以訂閱AnimationUtility.OnCurveWasModified委託功能。

相關問題