所以有两种方式 [我通过搜索获得,如果有其他方式请分享]来执行此操作。
我不想以第一种方式使用合作例,我不想使用 第二个是使用时间,如果增加动画速度,那么时间将无法正常工作,从而影响代码。
示例1
public class AnimationSequancePlayer : MonoBehaviour {
public Animation animation; // The animation we want to play the clips in.
public AnimationClip[] animationClips; // The animation clips we want to play in order.
int _currentClipOffset;
void Start()
{
foreach (AnimationClip clip in animationClips)
{
animation.AddClip(clip, clip.name); // Make sure the animation player contains all of our clips.
}
PlaySequence();
}
public void PlaySequence()
{
_currentClipOffset = 0; // Reset the index to start at the beginning.
PlayNextClip();
}
public void StopSequence()
{
animation.Stop();
StopAllCoroutines();
}
void PlayNextClip()
{
animation.Play(animationClips[_currentClipOffset].name); // Play the wanted clip
if (_currentClipOffset != animationClips.Length)
{ // Check if it's the last animation or not.
StartCoroutine(WaitForAnimationEnd(() => PlayNextClip())); // Listen for end of the animation to call this function again.
_currentClipOffset++; // Increase index for next time;
}
}
IEnumerator WaitForAnimationEnd(Action onFinish)
{
while (animation.isPlaying)
{ // Check if the animation is playing or not
yield return null;
}
if (onFinish != null) { onFinish(); } // Call the function give in parameter.
}
}
示例2
if (GetComponent<Animation>()["Move Crane"].time >= 3f)
{
///logic after animation reached at specified time specified time
}
答案 0 :(得分:0)
这段简短的代码片段让我能够做到这一点。注释中给出的代码描述也是如此。对未来的用户很有帮助。
O(n)