📜  如何在统一播放动画时停止移动 (1)

📅  最后修改于: 2023-12-03 14:52:58.072000             🧑  作者: Mango

如何在统一播放动画时停止移动

在动画播放时停止移动是一个常见的需求,下面介绍一种方法可以实现这个功能。

方法

我们可以使用 Animator 组件来控制动画的播放,然后通过代码控制物体的移动。在播放动画时,我们可以暂停移动并记录当前位置,然后在动画播放完成后再继续移动。

具体的实现步骤如下:

  1. 给物体添加 Animator 组件,并创建动画状态机;
  2. 在状态机中添加一个动画状态,并将动画片段添加到状态中;
  3. 在代码中获取 Animator 组件,并播放动画;
  4. Update() 函数中检测动画是否播放完成,如果完成则继续移动。
using UnityEngine;

public class MoveStopOnAnimation : MonoBehaviour
{
    private Animator animator;
    private bool hasStoppedMoving = false;
    private Vector3 currentPos;

    private void Awake()
    {
        animator = GetComponent<Animator>();
    }

    private void Start()
    {
        animator.Play("MoveAnimation");
    }

    private void Update()
    {
        if (!hasStoppedMoving && animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f)
        {
            currentPos = transform.position;
            hasStoppedMoving = true;
        }
        else if (hasStoppedMoving)
        {
            // Resume moving after animation has completed.
            transform.position = currentPos + new Vector3(0.1f, 0.0f, 0.0f) * Time.deltaTime;
        }
    }
}
解释

在上面的代码中,我们首先获取了 Animator 组件,然后在 Start() 函数中播放动画。

Update() 函数中,我们检测动画是否播放完成。如果完成了,则记录当前位置并停止移动。当动画播放完成后,我们将启动一个标记变量 hasStoppedMoving 并开始记录当前位置。

在动画停止移动后,我们可以在 Update() 函数中继续移动物体。为了简单起见,我们在这里使用了一个简单的向右移动方案,但当然你可以根据需要来实现。

总结

使用 Animator 组件可以方便地控制动画的播放。在执行动画时停止移动也是一种常见的需求,可以通过暂停移动并记录当前位置来实现。上面提供的代码可以作为参考来实现类似的功能。