NPC向左走或向右走时,如何使动画匹配?

How can I make the animation match when the NPC walks left or right?

我有一些 NPC 在一定范围内随机行走,但是当我无法确定它们何时向左或向右行走时,动画看起来不对。

我有一个名为“减少”的功能,当物体走动减少或增加其位置时,它会在终端内发出警告,但该功能无法正常工作

所以...

NPC向左走或向右走时,如何使动画匹配?

这是我的 NPC 配置:

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NPCController : MonoBehaviour
{
    private float waitTime;
    private Animator _animator;
    private SpriteRenderer _renderer;

    public Transform moveSpot;
    private bool _facingRight = true;
    public float lastXVal;
    public float speed;
    public float startWaitTime;
    public float minX;
    public float maxX;
    public float minY;
    public float maxY;

    void Awake()
    {
        _animator = GetComponent<Animator>();
        _renderer = GetComponent<SpriteRenderer>();
    }

    void Start()
    {
        waitTime = startWaitTime;
        moveSpot.position = new Vector2(Random.Range(minX, maxX), Random.Range(minY, maxY));
    }

    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, moveSpot.position, speed * Time.deltaTime);

        if (Vector2.Distance(transform.position, moveSpot.position) < 0.2f)
        {
            //Change animation state
            if (waitTime <= 0)
            {
                _animator.SetBool("Walk", true);
                moveSpot.position = new Vector2(Random.Range(minX, maxX), Random.Range(minY, maxY));
                waitTime = startWaitTime;
            }
            else
            {
                _animator.SetBool("Walk", false);
                _animator.SetBool("Idle", true);
                waitTime -= Time.deltaTime;
            }
        }
    }

    public void Decrease()
    {
        if (transform.hasChanged)
        {
            if (transform.position.x < lastXVal)
            {
                //Update lastXVal
                lastXVal = transform.position.x;
                Debug.Log("Decreased!");
            }

            else if (transform.position.x > lastXVal)
            {
                //Update lastXVal
                lastXVal = transform.position.x;
                Debug.Log("Increased");
            }

            transform.hasChanged = false;
        }
    }

}

您可以使用点积来计算行进方向。

Vector2 moveDirection = (moveSpot.position - transform.position).normalized;
float dotValue = Vector2.Dot(Vector2.right, moveDirection)

// if dotValue is 1 then you are moving right and if dotValue is -1 you are moving left