主要思路:
把水平方向与垂直方向的速度看作是向量,那只要在斜向走路的时候让两向量相加后还和水平/垂直时的向量相同就可以了。
float horizontalMove = Input.GetAxis("Horizontal");
float faceDirection = Input.GetAxisRaw("Horizontal");
float verticalMove = Input.GetAxis("Vertical");
if ((horizontalMove + verticalMove) > 1|| (horizontalMove + verticalMove) < -1|| (horizontalMove >0.1&& verticalMove <-0.1)|| (horizontalMove < -0.1 && verticalMove > 0.1))
{
horizontalMove = horizontalMove*(float)System.Math.Sqrt(0.5);
verticalMove = verticalMove*(float)System.Math.Sqrt(0.5);
}
rb.velocity = new Vector2(horizontalMove * speed, rb.velocity.y);
rb.velocity = new Vector2(rb.velocity.x, verticalMove * speed);