C# 如何使用[ExecuteInEditMode]更新更新函数中的列表? 使用系统集合; 使用System.Collections.Generic; 使用System.Linq; 使用UnityEngine; [执行编辑模式] 公共类动画摄影机:单行为 { 公共字符串测试; 公共摄像机; 公共摄像机; 私人动画师; 公共列表动画=新列表(); 私有void Start() { test=“daniel”; animationCamera.enabled=false; mainCamera.enabled=true; _anim=GetComponent(); } 私有void更新() { _anim=GetComponent(); foreach(AnimationClip ac in_anim.runtimeAnimatorController.animationClips) { 动画。添加(ac); } if(Input.GetKeyDown(KeyCode.C)) { animationCamera.enabled=!animationCamera.enabled; mainCamera.enabled=!mainCamera.enabled; 如果(animationCamera.enabled) { _动画交叉淡入(“动画符号”,0); } 其他的 { _动画交叉淡入(“动画空闲”,0); } } } 公共IEnumerator PlaySignAnimation() { animationCamera.enabled=真; _动画交叉淡入(“动画符号”,0); yield return null;//新的WaitForSeconds(动画[0]); animationCamera.enabled=false; mainCamera.enabled=true; } }

C# 如何使用[ExecuteInEditMode]更新更新函数中的列表? 使用系统集合; 使用System.Collections.Generic; 使用System.Linq; 使用UnityEngine; [执行编辑模式] 公共类动画摄影机:单行为 { 公共字符串测试; 公共摄像机; 公共摄像机; 私人动画师; 公共列表动画=新列表(); 私有void Start() { test=“daniel”; animationCamera.enabled=false; mainCamera.enabled=true; _anim=GetComponent(); } 私有void更新() { _anim=GetComponent(); foreach(AnimationClip ac in_anim.runtimeAnimatorController.animationClips) { 动画。添加(ac); } if(Input.GetKeyDown(KeyCode.C)) { animationCamera.enabled=!animationCamera.enabled; mainCamera.enabled=!mainCamera.enabled; 如果(animationCamera.enabled) { _动画交叉淡入(“动画符号”,0); } 其他的 { _动画交叉淡入(“动画空闲”,0); } } } 公共IEnumerator PlaySignAnimation() { animationCamera.enabled=真; _动画交叉淡入(“动画符号”,0); yield return null;//新的WaitForSeconds(动画[0]); animationCamera.enabled=false; mainCamera.enabled=true; } },c#,unity3d,unity5,C#,Unity3d,Unity5,按照现在的方式,它将一直更新动画列表,并在编辑器中不断向列表中添加相同的项目。 因为在编辑器中,我将更新Animator窗口,我希望它在每次从Animator窗口添加或删除动画片段时自动更新动画列表 按照现在的方式,它将始终更新动画列表,并且 将继续向编辑器中的列表中添加相同的项 简单的解决方法是,仅当动画列表中不存在ac时,才将其添加到动画列表中 更改: using System.Collections; using System.Collections.Generic; using Syst

按照现在的方式,它将一直更新动画列表,并在编辑器中不断向列表中添加相同的项目。 因为在编辑器中,我将更新Animator窗口,我希望它在每次从Animator窗口添加或删除动画片段时自动更新动画列表

按照现在的方式,它将始终更新动画列表,并且 将继续向编辑器中的列表中添加相同的项

简单的解决方法是,仅当动画
列表中不存在
ac
时,才将其添加到动画
列表中

更改:

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;

    }
}

可能还有其他方法,但这似乎很简单

编辑

至于检查何时修改动画剪辑,您可以订阅代理功能

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