@Gera01
Unity, С# и больше ничего.

Как сделать такой занос у Rigidbody2D?

Пример нужного заноса
Делаю следующим образом: двигаю обьект вперед с помощью addForse, а поворачиваю с помощью
transform.Rotate(Vector3.forward * rotatePower);
Но не то. Попробовал поменять настройки сопротивления. Опять не то. Нашел вращение rb вот такое:
rb.MoveRotation(rb.rotation + rotatePower * Time.fixedDeltaTime);

Вообще не то. Вопрос в том, как поворачивать rb чтобы был такой занос и как контролировать то, насколько он будет сильным?
  • Вопрос задан
  • 61 просмотр
Пригласить эксперта
Ответы на вопрос 1
EveningEugene
@EveningEugene
Unity-разраб
Во-первых, вам нужно уяснить разницу между физическим и не физическим движениями и понимать какие методы на что влияют. У вас изначально движение реализовано через физику, то есть вы придаёте объекту физический импульс и в конечном счёте это влияет на rg.velocity - именно он является итоговым вектором движения объекта.

А теперь, в контексте вышесказанного, задумайтесь, что вы пытались сделать своим первым несработавшим способом? Просто попытались повернуть объект в пространстве, никак не изменив вектор движения.

Во втором способе вы уже догадались применить правильный метод, но почему-то не догадались заглянуть в его документацию, чтобы узнать, а как его нужно правильно применять. Нет, вместо этого вы решили закинуть аргументы наугад, надеясь, что это заработает так, как вы хотите.
А правильно так (пример взят прямиком из документации):
Quaternion deltaRotation = Quaternion.Euler(m_EulerAngleVelocity * Time.fixedDeltaTime);
m_Rigidbody.MoveRotation(m_Rigidbody.rotation * deltaRotation);

, где m_EulerAngleVelocity - это вектор, содержащий в себе угол поворота для каждой из осей. Если ваш объект движется в плоскости XY, то вращать нужно вокруг оси Z:
m_EulerAngleVelocity = new(0, 0, rotatePower);
И не забудьте включить интерполяцию в компоненте rb объекта в инспекторе.

Предвосхищая ваш дальнейший геймдизайнерский вопрос, скажу - где-то в этом коде вы должны сбрасывать скорость объекта в зависимости от eulerDelta, который вам не помешает самому придумать, как реализовать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы