Во-первых, вам нужно уяснить разницу между физическим и не физическим движениями и понимать какие методы на что влияют. У вас изначально движение реализовано через физику, то есть вы придаёте объекту физический импульс и в конечном счёте это влияет на 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
, который вам не помешает самому придумать, как реализовать.