Я хочу, чтобы мой персонаж двигался только в том направлении, в котором он смотрит - PullRequest
1 голос
/ 26 сентября 2019

У меня есть 3D-игра, где моя камера смотрит на всю мою местность, и у меня есть персонаж, который движется с контроллером Xbox.Я хочу, чтобы мой персонаж двигался только в том направлении, в котором он смотрит, а не в стороны.У меня есть следующий код, который заставляет моего персонажа двигаться.

void Update()
    {
        MoveInput = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
        moveVelocity = MoveInput * MoveSpeed;

        Vector3 PlayerDirection = Vector3.right * -Input.GetAxisRaw("RHorizontal") + Vector3.forward * -Input.GetAxisRaw("RVertical");
        if (PlayerDirection.sqrMagnitude > 0.0f)
        {
            transform.rotation = Quaternion.LookRotation(PlayerDirection, Vector3.up);
        }

Персонаж двигается с левой стороны контроллера, а с правой стороны я могу перемещать направление, в котором он стоит.

1 Ответ

2 голосов
/ 26 сентября 2019

В настоящее время вы используете входные данные как компоненты x и z в направлении мирового пространства.В нем вообще не учитывается вращение символа.

Вместо этого вы должны умножить входные данные и соответствующее локальное направление в мировом пространстве, а затем объединить их.В вашем случае это может выглядеть так:

MoveInput = (
        transform.right * Input.GetAxisRaw("Horizontal") 
        + transform.forward * Input.GetAxisRaw("Vertical")
        ).normalized;

moveVelocity = MoveInput * MoveSpeed;

Vector3 PlayerDirection = Vector3.right * -Input.GetAxisRaw("RHorizontal") 
        + Vector3.forward * -Input.GetAxisRaw("RVertical");

if (PlayerDirection.sqrMagnitude > 0.0f)
{
    transform.rotation = Quaternion.LookRotation(PlayerDirection, Vector3.up);
}

normalized означает, что вы не будете двигаться быстрее по диагонали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...