如果自上一个动画以来没有足够的时间,Unity Animation将无法播放

时间:2018-11-19 23:19:58

标签: unity3d animation midi

我正在制作MIDI可视化器,我决定尝试的第一台乐器是牛铃。刚开始时,我将存储何时应播放牛铃的时间列表(我将在稍后进行MIDI解析)。然后,它会检查当前时间是否已经过去或等于音符应该播放的时间。

for (int i = 0; i < times.Length; i++) { // For each note
         bool notePlayed = false;
         while (!notePlayed) { // While current note hasn't been played (waiting for its time)
             if (Time.timeSinceLevelLoad >= timesAdjusted [i]) { // If the current time is past or equal to the time it should play
                 anim.Play ("hit"); // Play animation
                 Debug.Log ("hit!");
                 notePlayed = true; // The note has been played.
             }
             yield return null;
         }
     }

这有效,但前提是前一个音符和当前音符之间的时间足够大以使动画结束。那么,无论动画是否完成,如何播放动画?

2 个答案:

答案 0 :(得分:0)

您正在使用“播放”方法,该方法将播放动画状态,而不管您的过渡状态(Idle-> Hit),而且过渡中没有定义条件,这会在状态之间创建无限循环。

要解决主要问题,必须将“ normalizedTime”参数设置为0,例如:

anim.Play ("hit",0,0); //assuming "hit" state is in your 0 layer

答案 1 :(得分:0)

禁用具有退出时间复选框以更改动画而无需等待另一个