Движение игрока по диагонали

Есть такой код. Где реализовано движение вперёд, назад, влево, вправо.

Но появилось желание чтобы он двигался по диагонали, относительно своего вектора Z. Нажатиями кнопок W/A, W/D, S/A, S/D.

Вот кусок кода:

private float X, Y, Z;
public int speed;
public int rotSpeed;

public float sensitivity = 3;
private Rigidbody rb;

private Vector3 movement = Vector3.zero;

public Player player;
private int speedX = 5;

private void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    //Поворот игрока
    X += Input.GetAxis("Mouse X") * rotSpeed * Time.deltaTime;
    Y += Input.GetAxis("Mouse Y") * rotSpeed * Time.deltaTime;

    transform.rotation = Quaternion.Euler(Y, X, Z);

    //Движение игрока
    float z = Input.GetAxis("Vertical");

    if (z != 0)
    {
        movement.z = z;
    }
    else
        movement = Vector3.zero;

    if (movement != Vector3.zero)

    rb.AddForce(movement * speed);

    if (Input.GetKey(KeyCode.D))
    {
        player.transform.position += Vector3.right * speedX * Time.deltaTime;
    }
    if (Input.GetKey(KeyCode.A))
    {
        player.transform.position -= Vector3.right * speedX * Time.deltaTime;
    }

}

Посмотрев в интернете реализацию у других пользователей. Не нашёл для своего случая ответа. Либо он некорректно работал.


Ответы (0 шт):