Изменение направления движения игрока в соответствии с камерой - PullRequest
3 голосов
/ 30 мая 2019

Я пытаюсь заставить камеру от первого лица и движение камеры и плеера работать именно так, как мне нужно, однако моя проблема сейчас в том, что если я смотрю направо с камерой и нажимаю W, чтобы двигаться вперед, она движется впередв соответствии с игровым миром, а не с направлением, в котором смотрит камера.

Я пытался изменить родительские функции или использовать преобразование, чтобы связать игрока и камеру вместе.

// Simple Player movement
Rigidbody rb;
public float speed;

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

void FixedUpdate()
{
    float mH = Input.GetAxis("Horizontal");
    float mV = Input.GetAxis("Vertical");
    rb.velocity = new Vector3(mH * speed, rb.velocity.y, mV * speed);
}
// Camera controls (separate script)
private Transform playerBody;

void update()
{
    CameraRotation();
}

private void CameraRotation()
{
    float mouseX = Input.GetAxis(mouseXInputName) * mouseSensitivity * Time.deltaTime;
    float mouseY = Input.GetAxis(mouseYInputName) * mouseSensitivity * Time.deltaTime;
    xAxisClamp += mouseY;

    if (xAxisClamp > 90.0f)
    {
        xAxisClamp = 90.0f;
        mouseY = 0.0f;
        ClampAxisRotationToValue(270.0f);
    }
    else if (xAxisClamp < -90.0f)
    {
        xAxisClamp = -90.0f;
        mouseY = 0.0f;
        ClampAxisRotationToValue(90.0f);
    }
    transform.Rotate(Vector3.left * mouseY);
    playerBody.Rotate(Vector3.up * mouseX);
}

С последней строкой playerBody.rotate Я ожидал, что он повернет объект, к которому прикреплена камера, поэтому при нажатии вперед он будет двигаться вперед в направлении, куда смотрит камера, но это не так.все еще движется в своих статических X и Z, игнорируя направление камеры.

1 Ответ

1 голос
/ 30 мая 2019

Когда вы перемещаете своего персонажа, вы устанавливаете его скорость относительно осей мира и не учитывает вращение объекта.

Чтобы добавить вращение объекта во вход, просто основывайте вход навращение, как это:

void FixedUpdate()
{
    Vector3 mH = transform.right * Input.GetAxis("Horizontal");
    Vector3 mV = transform.forward * Input.GetAxis("Vertical");
    rb.velocity = (mH + mV) * speed;
}

Теперь значения мГн и мВ должны быть относительно того, где находится ваш объект, потому что transform.forward.right) будет представлять, что «вперед» для вашегоobject.

И так как GetAxis () будет представлять число между -1 & 1, мы в основном говорим, что Input.GetAxis определяет СКОЛЬКО вперед, который мы хотим пройти.1 или -1?Вперед или назад?forward * 1 или forward * -1.То же самое со стрельбой;right * 1 или right * -1.

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