Unity 2D 播放器移动:禁用对角线并确定上次按下键的方向的优先级



此代码实现2d移动并禁用对角线;当有水平输入时,'if'语句覆盖垂直移动,但当同时检测到垂直输入时,我无法覆盖水平移动..我想优先考虑按下最后一个键的方向(当多个键同时按下时)

public class PlayerMovement : MonoBehaviour
public float moveSpeed = 5f;
public Rigidbody2D rb;
Vector2 movement;
// Update is called once per frame
void Update()
{
// Input
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
//Disable diagonal movement and prioritize direction of last key pressed
if (movement.x != 0) movement.y = 0;
else if (movement.y != 0) movement.x = 0;
}
void FixedUpdate()
{
// Movement
rb.MovePosition(rb.position + movement * moveSpeed * Time.fixedDeltaTime);
}

明白了!所有的信用https://stackoverflow.com/users/3214843/manfred-radlwimmer回答基本上相同的问题:如何停止对角线移动- Unity 2d?

下面是本例中需要的特定代码:

// Disable diagonal movement & prioritize direction of last key pressed
bool isMovingHorizontal = Mathf.Abs(movement.x) > 0.5f;
bool isMovingVertical = Mathf.Abs(movement.y) > 0.5f;
if (isMovingVertical && isMovingHorizontal)
{
if (wasMovingVertical)
{
movement.y = 0;
}
else
{
movement.x = 0;
}
}
else if (isMovingHorizontal)
{
movement.y = 0;
wasMovingVertical = false;
}
else if (isMovingVertical)
{
movement.x = 0;
wasMovingVertical = true;
}
else
{
movement.x = 0;
movement.y = 0;
}