Почему Unity преобразует мою скорость вперед в горизонтальную скорость? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему Unity преобразует мою скорость вперед в горизонтальную скорость? [закрыто]

Сообщение Anonymous »


Контроллер персонажа начинает летать горизонтально, когда я отменяю скорость вперед, совершая прыжок назад

Пытался запрограммировать управление воздухом для встроенного контроллера персонажа, все работало нормально, пока я не попытался отменить движение в воздухе, из-за чего я отклонился в сторону.

Если это не объяснило, вот пример: я прыгаю вперед, затем пытаюсь отойти назад, и внезапно я лечу вправо. Пытался отладить вектор движения, а мои _movement.x и _movement.z просто меняются местами.

#Обновить попробовал пойти вбок, а затем отменить движение, противодействуя ему, возникает та же проблема, но наоборот, моя горизонтальная скорость превращается в скорость вперед

#Upd2 Еще больше отлажено, оказывается, что нормализация вектора превращает небольшое количество бокового движения в горизонтальное движение с максимальной скоростью примерно через 10-15 кадров после отмены движения. (Журнал прикреплен в конце), не знаю, как это исправить

Вот код

Private void CalculateMoveDirection() { если (CanMove) { если (Controller.isGrounded) { _movement = PlayerInput.Horizontal * Transform.right + PlayerInput.Vertical * Transform.forward; _movement = _movement.normalized * _currentSpeed ​​* Time.deltaTime; } еще { _movement = новый Vector3(_savedVelocity.x, 0f, _savedVelocity.z) * Time.deltaTime; Debug.Log($"[SET TO SAVED VEL] {_movement}"); если(Input.GetKeyDown(KeyCode.S)) { Debug.Log("НАЗАД НАЖАТ"); } Debug.Log($"[INPUT MOVEMENT] {((PlayerInput.Horizontal * Transform.right + PlayerInput.Vertical * Transform.forward) * _airControl) * _currentSpeed ​​* Time.deltaTime}"); _movement += ((PlayerInput.Horizontal * Transform.right + PlayerInput.Vertical * Transform.forward) * _airControl) * _currentSpeed ​​* Time.deltaTime; Debug.Log($"[ДОБАВЛЕНО ВХОДНОЕ ДВИЖЕНИЕ] {_movement}"); _movement = _movement.normalized * _currentSpeed ​​* Time.deltaTime; Debug.Log($"[НОРМАЛИЗИРОВАНО] {_movement}"); } } еще { _movement = Vector3.ноль; } если (Controller.isGrounded) { _yAxisVelocity = -0,5f; } } Журналы отладки
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»