如果自上次动画以来时间不够,Unity 动画将不会播放
Unity Animation won't play if not enough time since last animation
我正在制作一个 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;
}
}
这可行,但前提是前一个音符和当前音符之间的时间足够大以使动画完成。那么,无论动画是否完成,我怎样才能让动画播放呢?
您正在使用 "Play" 方法,无论您的转换 (Idle->Hit) 是什么,该方法都会播放动画状态,而且您的转换中没有定义任何条件,这将在您的状态之间创建一个无限循环。
要解决您的主要问题,您必须将 "normalizedTime" 参数设置为 0,例如:
anim.Play ("hit",0,0); //assuming "hit" state is in your 0 layer
禁用具有退出时间复选框以更改动画而无需等待另一个
我正在制作一个 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;
}
}
这可行,但前提是前一个音符和当前音符之间的时间足够大以使动画完成。那么,无论动画是否完成,我怎样才能让动画播放呢?
您正在使用 "Play" 方法,无论您的转换 (Idle->Hit) 是什么,该方法都会播放动画状态,而且您的转换中没有定义任何条件,这将在您的状态之间创建一个无限循环。
要解决您的主要问题,您必须将 "normalizedTime" 参数设置为 0,例如:
anim.Play ("hit",0,0); //assuming "hit" state is in your 0 layer
禁用具有退出时间复选框以更改动画而无需等待另一个