Я создаю 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);