Скорость единства, действующая при вращении камеры - PullRequest
0 голосов
/ 16 февраля 2019

Я создаю 3D-платформер, и у меня есть два режима движения: наземный и воздушный.Когда игрок находится на земле, он движется в направлении, в котором он стоит, и в воздухе управляется двумя переменными, называемыми velX и velZ.

Моя проблема в том, что когда я поворачиваюкамера в воздухе, и игрок идет влево, скорость будет идти влево от направления, в котором находится камера.Я пытался исправить это почти неделю, и я не могу найти ответы на вопросы, как решить мою проблему.Я знаю , почему это происходит из-за того, как работает эта строка кода.

moveDirection = (camera.forward * Mathf.Round(velZ)) + (camera.right * Mathf.Round(velX));

Я попытался удалить camera.forward / right из moveDirection, но затемигрок не движется в зависимости от направления камеры.Затем я попытался добавить camera.forward / right, где я добавляю / вычитаю velX / velZ, но поскольку camera.forward / right являются плавающими, у меня возникают проблемы.

Вот мой код:

velZ += acceleration * Input.GetAxis("Vertical") * 1.5f * Time.deltaTime;
velX += acceleration  * Input.GetAxis("Horizontal") * 1.5f * Time.deltaTime;
if (!myCharacterController.isGrounded) {
    moveDirection = (camera.forward * Mathf.Round(velZ)) + (camera.right * Mathf.Round(velX));
}
myCharacterController.move(moveDirection * Time.deltaTime);

1 Ответ

0 голосов
/ 18 февраля 2019

Мне удалось очень легко решить мою проблему.Я просто заменил velX и velZ (которые были плавающими) на Vector3 под названием «airVel».

Код:

airVel += acceleration * Input.GetAxis("Vertical") * 1.5f * Time.deltaTime;
airVel += acceleration  * Input.GetAxis("Horizontal") * 1.5f * Time.deltaTime;
if (!myCharacterController.isGrounded) {
    moveDirection = airVel;
}
myCharacterController.move(moveDirection * Time.deltaTime);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...