Q: Как при нажатие W и D, сделать активной только одну анимацию? Есть объект Character, для него я написал условия с анимациями:
public class PlayerController : MonoBehaviour
{
    public float SpeedMove;
 
    private Rigidbody2D RB;
    private CapsuleCollider2D CC;
    private Vector2 moveVelocity;
    private Animator AM;
 
    public bool isWalkForward = false;
    public bool isWalkBackward = false;
    public bool isWalkLeft = false;
    public bool isWalkRight = false;
    public bool isStoped = false;
 
 
    private string currentAM;
 
 
    void Start()
    {
        RB = GetComponent<Rigidbody2D>();
        CC = GetComponent<CapsuleCollider2D>();
        AM = GetComponent<Animator>();
    }
 
    void Update()
    {
        Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
        moveVelocity = moveInput.normalized * SpeedMove;
 
    }
 
    void FixedUpdate()
    {
        RB.MovePosition(RB.position + moveVelocity * Time.fixedDeltaTime);
 
        if (Input.GetAxisRaw("Vertical") > 0)
        {
            ChangeAnimation("Player_walk_forward");
            isWalkForward = true;
            isStoped = false;
        }
 
        if (Input.GetAxisRaw("Vertical") < 0)
        {
            ChangeAnimation("Player_walk_back");
            isWalkBackward = true;
            isStoped = false;
        }
 
        if (Input.GetAxisRaw("Horizontal") > 0)
        {
            gameObject.transform.localScale = new Vector3(57.6f, 57.6f, 57.6f);
            ChangeAnimation("Player_walk");
            isWalkRight = true;
            isStoped = false;
        }
 
        if (Input.GetAxisRaw("Horizontal") < 0)
        {
            gameObject.transform.localScale = new Vector3(-57.6f, 57.6f, 57.6f);
            ChangeAnimation("Player_walk");
            isWalkLeft = true;
            isStoped = false;
        }
 
        if (Input.GetAxisRaw("Vertical") == 0 && Input.GetAxisRaw("Horizontal") == 0)
        {
            isStoped = true;
        }
 
        // ++
 
        if (isWalkForward == true && isStoped == true)
        {
            ChangeAnimation("Player_idle_back");
            isWalkForward = false;
        }
        
        if (isWalkBackward == true && isStoped == true)
        {
            ChangeAnimation("Player_idle");
            isWalkBackward = false;
        }
 
        if (isWalkRight == true && isStoped == true)
        {
            ChangeAnimation("Player_idle_right");
            isWalkRight = false;
        }
 
        if (isWalkLeft == true && isStoped == true)
        {
            ChangeAnimation("Player_idle_right");
            isWalkLeft = false;
        }
       
    }
 
    void ChangeAnimation(string animation)
    {
        if (currentAM == animation) return;
 
        AM.Play(animation);
 
        currentAM = animation;  
    }   
}

(Я новичок, возможно это выглядит не идеально, но оно работает ;) )
При проверки ходьбы, я заметил, что при нажатие W и D, персонаж ходит с двумя анимациями Player_walk и Player_walk_forward :
Player_walk_forward - ходьба вперёд.
Player_walk - меняется X, т.е объект разворачивается в зависимости от нажатия A или D:
gameObject.transform.localScale = new Vector3(-57.6f, 57.6f, 57.6f); // A
gameObject.transform.localScale = new Vector3(57.6f, 57.6f, 57.6f); // D


Как мне отследить нажатие включить нужную анимацию?

A: Использовал пару советов отсюда, в остальном сохранил логику. Другими словама, вы вы не хотите чтобы анимация вверху и вниз включалась если игрок при этом передвигается по диагонали, то надо проверять горизонтальную ось и переключать анимацию только в том случае, если горизонтальная ось 0.
public class PlayerController : MonoBehaviour
{
    public float SpeedMove;

    private Rigidbody2D RB;
    private CapsuleCollider2D CC;
    private Vector2 moveVelocity;
    private Animator AM;

    public bool isWalkForward = false;
    public bool isWalkBackward = false;
    public bool isWalkLeft = false;
    public bool isWalkRight = false;
    public bool isStoped = false;

    private string currentAM;

    void Start()
    {
        RB = GetComponent<Rigidbody2D>();
        CC = GetComponent<CapsuleCollider2D>();
        AM = GetComponent<Animator>();
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxisRaw("Horizontal");
        float moveVertical = Input.GetAxisRaw("Vertical");

        transform.Translate(new Vector3(moveHorizontal, 0f, moveVertical) * SpeedMove * Time.fixedDeltaTime);

        if (moveHorizontal == 0f && moveVertical != 0f)
        {
            if (moveVertical > 0f)
            {
                ChangeAnimation("Player_walk_forward");
                isWalkForward = true;
            }
            else
            {
                ChangeAnimation("Player_walk_back");
                isWalkBackward = true;
            }
        }

        if (moveHorizontal != 0f)
        {
            if (moveHorizontal > 0f)
            {
                gameObject.transform.localScale = new Vector3(57.6f, 57.6f, 57.6f);
                isWalkRight = true;
            }
            else
            {
                gameObject.transform.localScale = new Vector3(-57.6f, 57.6f, 57.6f);
                isWalkLeft = true;
            }
            ChangeAnimation("Player_walk");
        }

        isStoped = moveHorizontal == 0f && moveVertical == 0f;

        if (isStoped)
        {

            if (isWalkForward)
            {
                ChangeAnimation("Player_idle_back");
            }
            else if (isWalkBackward)
            {
                ChangeAnimation("Player_idle");
            }
            else if (isWalkRight || isWalkLeft)
            {
                ChangeAnimation("Player_idle_right");
            }

            isWalkForward = false;
            isWalkBackward = false;
            isWalkRight = false;
            isWalkLeft = false;
        }
    }

    void ChangeAnimation(string animation)
    {
        if (currentAM == animation) return;
        AM.Play(animation);
        currentAM = animation;
    }
}

Для нефизического движения вам не нужен RB.
