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; } }
按照现在的方式,它将一直更新动画列表,并在编辑器中不断向列表中添加相同的项目。 因为在编辑器中,我将更新Animator窗口,我希望它在每次从Animator窗口添加或删除动画片段时自动更新动画列表 按照现在的方式,它将始终更新动画列表,并且 将继续向编辑器中的列表中添加相同的项 简单的解决方法是,仅当动画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
列表中不存在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);
}
}