在队列中按 4 个游戏对象的顺序播放 - 动画师(不是具有多个状态的单个动画师)
Posted
技术标签:
【中文标题】在队列中按 4 个游戏对象的顺序播放 - 动画师(不是具有多个状态的单个动画师)【英文标题】:Play in sequence of 4 game objects - animators (Not single animator with multiple states) in a queue 【发布时间】:2021-05-27 11:23:57 【问题描述】:我是统一的新手。我有 4 个游戏对象,分别是红色、绿色、蓝色、黄色 - 索引分别映射为 0、1、2 和 3。另外,我在列表List<int> systemTrack
中保留了索引序列。
现在,我调用animator
相对于列表 0, 1, 2, 3
的序列(这可以是随机的0-3)。
我可以在给定时间执行一个动画循环。
void Start()
animator.Play("blue_animation", 0, 0);
如何根据 list 顺序调用?也许Update()
是个合适的地方。
到目前为止,我找到了this thread - 但它有一个具有多个状态的单个 Animator 对象按顺序调用,这不是我的情况。
很少有其他讨论也适用于Animation
组件不适用于new Animator
组件。
【问题讨论】:
请使用正确的标签...unityscript
是或更好 是一种 javascript 风格,类似于早期 Unity 版本中使用的自定义语言,现在早已弃用...你的代码显然是c#
【参考方案1】:
在您当前的课程中,您可以使用 Coroutine 之类的
List<AnimatorQueueController> animatorQueues;
private void Start()
StartCoroutine(RunAllControllersSequencial());
IEnumerator RunAllControllersSequencial()
foreach (var queue in animatorQueues)
// This runs the routine and waits until it finishes
yield return queue.RunAnimationQueueAndWait();
现在唯一要做的就是定义/实现每个控制器如何“知道”它自己的动画队列已经完成。
可能有很多可能的方法。马上:它们都不会是漂亮的;)由于Animator
使用了很多基于string
的东西,你最终要么必须确保所有动画/触发器名称都正确编写,要么你必须参考动画剪辑,或者希望状态被称为相同,或者您必须通过相应的剪辑昂贵地找到状态,您必须知道等待队列完成的时间等等。
这就是说,这个解决方案也不是完美的,但我认为对于您的设置来说这将是最方便的;)
你可以例如使用Animation Event 并执行类似的操作
public class AnimationQueueController : MonoBehaviour
[SerializeField] private Animator _animator;
// Here set the first state name for each instance via the Inspector
[SerializeField] private string firstStateName = "first_state";
private void Awake ()
if(!_animator) _animator = GetComponent<Animator>();
// Simply have another routine you can yield so it is executed and at the same time waits until it is done
public IEnumerator RunAnimationQueueAndWaitUntilEnd()
hasReachedEnd = false;
_animator.Play(firstStateName, 0 ,0);
yield return new WaitUntil(() => hasReachedEnd);
// This is the method you will invoke via the Animation Event
// See https://docs.unity3d.com/Manual/script-AnimationWindowEvent.html
public void AnimationEnd()
hasReachedEnd = true;
这至少将您的实现开销减少到
确保在最后一个状态结束时触发动画事件 确保在AnimatorQueueController
中提供第一个州的名称
在您的原始脚本中而不是 Animator
引用中,而不是将 AnimatorQueueController
存储在您的列表中
【讨论】:
以上是关于在队列中按 4 个游戏对象的顺序播放 - 动画师(不是具有多个状态的单个动画师)的主要内容,如果未能解决你的问题,请参考以下文章