public void OnClick() { Debug.Log("jump"); GameObject go = GameObject.Find("Constructor"); if (go != null) { Animation animation = go.GetComponent<Animation>(); if (animation["jump_pose"] != null) animation.Play("jump_pose"); } } 在以上代码中,我想做到名为jump_pose的动画播放完毕后,再执行animation.Play("idle"),该如何修改
时间: 2024-02-14 14:26:00 浏览: 98
Unity Object内部原理1
您可以使用协程(Coroutine)来实现在动画播放完毕后执行其他操作的需求。以下是修改后的代码:
```csharp
public IEnumerator PlayJumpAnimation()
{
Debug.Log("jump");
GameObject go = GameObject.Find("Constructor");
if (go != null)
{
Animation animation = go.GetComponent<Animation>();
if (animation != null && animation["jump_pose"] != null)
{
animation.Play("jump_pose");
yield return new WaitForSeconds(animation["jump_pose"].length);
animation.Play("idle");
}
}
}
public void OnClick()
{
StartCoroutine(PlayJumpAnimation());
}
```
在修改后的代码中,我们将播放跳跃动画的逻辑封装到一个协程函数 `PlayJumpAnimation()` 中。首先播放跳跃动画,然后通过 `yield return new WaitForSeconds(animation["jump_pose"].length)` 等待跳跃动画的播放时间长度。等待结束后,再播放站立动画("idle")。最后,在 `OnClick()` 函数中调用 `StartCoroutine(PlayJumpAnimation())` 来启动协程。
这样修改后,当跳跃动画播放完毕后,才会执行站立动画的播放操作。
阅读全文