【发布时间】:2020-04-07 23:10:58
【问题描述】:
它已在编辑器中分配,但在运行时运行游戏时,Animator 控制器已消失且不再分配。
我正在尝试一一播放Animator控制器中的所有状态动画。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEditor.Animations;
public class SwitchAnimations : MonoBehaviour
{
public AnimatorController controller;
private Animator animator;
private AnimatorState[] states;
// Use this for initialization
void Start()
{
animator = GetComponent<Animator>();
states = GetStateNames(animator);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
StartCoroutine(QueueAnim(states));
}
}
private AnimatorState[] GetStateNames(Animator animator)
{
controller = animator ? animator.runtimeAnimatorController as AnimatorController : null;
return controller == null ? null : controller.layers.SelectMany(l => l.stateMachine.states).Select(s => s.state).ToArray();
}
IEnumerator QueueAnim(params AnimatorState[] anim)
{
int index = 0;
while (index < anim.Length)
{
if (index == anim.Length)
index = 0;
animator.Play(anim[index].name);
AnimatorStateInfo si = animator.GetCurrentAnimatorStateInfo(index);
yield return new WaitForSeconds(5);
index++;
}
}
}
首先脚本中的所有变量都是私有的,而这个是静态的:
private static AnimatorController controller;
GetStateNames 方法也是静态的:
private static AnimatorState[] GetStateNames(Animator animator)
但我将控制器变量更改为公共变量而不是静态变量,因此 GetStateNames 现在不是静态的,因为脚本附加到空的 GameObject。
但是当我将 Animator Controller 分配给控制器时,它在运行游戏时消失了。
运行游戏前的截图:
【问题讨论】: