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