当我在 Unity (2021) 中上下移动时,如何让我的播放器空闲或增加速度?

问题描述 投票:0回答:1

这是我的玩家移动代码。我已经设置了四处走动,现在我正尝试在向不同方向行走时更改精灵动画。一切正常,但是当我尝试更改精灵以向上行走时,精灵卡在一个循环中并且不会闲置。

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

public class PlayerMovement : MonoBehaviour
{
    public Animator Animator;

    [SerializeField] private float speed = 1f;

    private Rigidbody2D body;
    private Vector2 axisMovement;

    // Start is called before the first frame update
    void Start()
    {
        body = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        axisMovement.x = Input.GetAxisRaw("Horizontal");
        axisMovement.y = Input.GetAxisRaw("Vertical");

        Animator.SetFloat("Speed", Mathf.Abs(axisMovement.x));

         if (Input.GetKey(KeyCode.W))
         {
            Animator.SetBool("isforward", true);
         }
         if (Input.GetKey(KeyCode.A))
         {
            Animator.SetBool("isforward", false);
         }
         if (Input.GetKey(KeyCode.S))
         {
            Animator.SetBool("isforward", false);
         }
           if (Input.GetKey(KeyCode.D))
         {
            Animator.SetBool("isforward", false);
         }
    }

    private void FixedUpdate()
    {
        Move();
    }

    private void Move()
    {
        body.velocity = axisMovement.normalized * speed;
        CheckForFlipping();
    }

    private void CheckForFlipping()
    {
        bool movingLeft = axisMovement.x < 0;
        bool movingRight = axisMovement.x > 0;

        if (movingLeft)
        {
            transform.localScale = new Vector3(-1f, transform.localScale.y);
        }

        if (movingRight)
        {
            transform.localScale = new Vector3(1f, transform.localScale.y);
        }        
    }
}

我也试过做 Animator.SetFloat("Speed", Mathf.Abs(axisMovement.x));但是用 axisMovement.y 切换它,但这会停止所有左右移动的动画停止工作。 😢

unity3d unityscript
1个回答
0
投票

我想通了。这是更新的代码

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

public class PlayerMovement : MonoBehaviour
{
    public Animator Animator;

    [SerializeField] private float speed = 1f;

    private Rigidbody2D body;
    private Vector2 axisMovement;

    // Start is called before the first frame update
    void Start()
    {
        body = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        axisMovement.x = Input.GetAxisRaw("Horizontal");
        axisMovement.y = Input.GetAxisRaw("Vertical");

        Animator.SetFloat("Speed", Mathf.Abs(axisMovement.x + axisMovement.y));

          if (Input.GetKey(KeyCode.W))
          {
             Animator.SetBool("isforward", true);
          } else {
            Animator.SetBool("isforward", false);
          }
        //  if (Input.GetKey(KeyCode.A))
        //  {
        //     Animator.SetBool("isforward", false);
        //  }
        //  if (Input.GetKey(KeyCode.S))
        //  {
        //     Animator.SetBool("isforward", false);
        //  }
        //    if (Input.GetKey(KeyCode.D))
        //  {
        //     Animator.SetBool("isforward", false);
        //  }
    }

    private void FixedUpdate()
    {
        Move();
    }

    private void Move()
    {
        body.velocity = axisMovement.normalized * speed;
        CheckForFlipping();
    }

    private void CheckForFlipping()
    {
        bool movingLeft = axisMovement.x < 0;
        bool movingRight = axisMovement.x > 0;

        if (movingLeft)
        {
            transform.localScale = new Vector3(-1f, transform.localScale.y);
        }

        if (movingRight)
        {
            transform.localScale = new Vector3(1f, transform.localScale.y);
        }        
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.