Unity3D:返回到空闲状态动画

本文关键字:状态 动画 返回 Unity3D | 更新日期: 2023-09-27 17:57:18

我在游戏中返回到空闲状态动画时遇到问题。这个视频是我的问题的一个例子。我的播放器不会返回到空闲状态动画,我确实尝试将其添加到我的代码中:

anim.SetBool ("walking", false); 

(这放在我的代码末尾附近)

但这会发生。这不是我想要的。在我向您展示的第一个视频中,它显示了我单击步行参数关闭,以便我可以向您展示如果我的播放器在到达目的地后停止,我的动画会是什么样子。在视频中,你可以看到我的球员在上下走后面对错误的方式,它面对这种方式和那种方式,我也想修复,但不知道如何解决。所以任何人都可以帮助我解决我的两个问题,那就是:

  1. 一旦我的玩家到达目的地,就会返回到空闲动画。
  2. 并确保我的玩家按照预期面向正确的方向。我的玩家的精灵图像

这是我的代码:

第二次编辑

private Animator anim;
public float speed = 15f;
private Vector3 target;
private bool touched;
private bool playerMovementRef;
void Start () 
{
    target = transform.position;
    anim = GetComponent<Animator> ();
}
void Update () 
{
if(transform.position == target)
{
    anim.SetBool ("walking", false);
}
    if (Input.GetMouseButtonDown (0))
       {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = 10; // distance from the camera
        target = Camera.main.ScreenToWorldPoint (mousePosition);
        target.z = transform.position.z;
        var movementDirection = (target - transform.position).normalized;
            Vector3 animDirection = Vector3.zero;
            // Use >= to default to horizontal on both being equal
        if (movementDirection.x > movementDirection.y) 
            animDirection.x = 1;
        else
            animDirection.y = 1;
        anim.SetBool ("walking", true);
        anim.SetFloat ("SpeedX", movementDirection.x);
        anim.SetFloat ("SpeedY", movementDirection.y);
        Debug.LogFormat ("X: {0}, Y: {1}", movementDirection.x, movementDirection.y);
        if (movementDirection.x > 0)
        {
            anim.SetFloat ("LastMoveX", 1f);
        }
        else if (movementDirection.x < 0) 
        {
            anim.SetFloat ("LastMoveX", -1f);
        } 
        else 
        {
            if (movementDirection.y > 0)
            {
                anim.SetFloat ("LastMoveY", 1f);
            } 
            else if (movementDirection.y < 0)
            {
                anim.SetFloat ("LastMoveY", -1f);
            } 
            else 
            {
                anim.SetFloat ("LastMoveY", 0f);
            } 
        }   
    } 
    else 
    {
            transform.position = Vector3.MoveTowards (transform.position, target, speed * Time.deltaTime);
    }
}

Unity3D:返回到空闲状态动画

检测玩家是否在当前目的地。您可以从target获取当前目的地。如果它在当前目的地,则使"行走"布尔值为假。面对正确的方向应该可以正常工作。

将此块放入Update()

if(transform.position == target)
{
    anim.SetBool ("walking", false);
}