如何使用 [执行编辑模式] 更新函数中的列表


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;
    }
}

现在的方式,它将一直更新动画列表,并将继续将相同的项目添加到编辑器中的列表中。由于在编辑器中我将更新动画器窗口,我希望每次从/向动画器窗口添加或删除动画剪辑时,它都会自动更新动画列表。

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

简单的解决方法是仅当动画List中不存在ac时才将添加到动画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委托功能。

最新更新