如何使用[ExecuteInEditMode]更新Update函数中的List?

时间:2017-05-09 10:36:43

标签: c# unity3d unity5

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窗口添加或删除动画剪辑时自动更新动画列表。

1 个答案:

答案 0 :(得分:1)

  

现在的方式是它会一直更新动画列表   将继续在编辑器中将相同的项目添加到列表中。

简单的解决方法是,只有在动画ac中不存在动画List时,才会将List添加到动画中。{/ p>

变化:

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委托功能。