Unity Как задать локальное пространство в rigitbody MovePosition?

Когда мы используем метод MovePosition для перемещения объекта с компонентом Rigidbody в Unity, это перемещение происходит в глобальном пространстве сцены. Однако, иногда нам может потребоваться перемещать объекты в локальном пространстве относительно другого объекта. В данном случае, мы можем использовать функцию Transform.TransformDirection для преобразования векторов из локального пространства в глобальное пространство или Transform.InverseTransformDirection для обратного преобразования из глобального пространства в локальное.

Прежде всего, нам нужно обратиться к компоненту Rigidbody с помощью кода. Допустим, у нас есть объект с названием "objectA" и у него есть компонент Rigidbody. Мы можем обратиться к нему следующим образом:

Rigidbody rb = objectA.GetComponent<Rigidbody>();

Затем мы можем задать вектор перемещения в локальном пространстве для объекта "objectA". Допустим, мы хотим переместить объект "objectA" на 2 единицы вперед и 1 единицу вниз в его локальном пространстве. Мы можем использовать функцию Transform.TransformDirection, чтобы преобразовать этот вектор в глобальное пространство, а затем передать этот вектор в метод MovePosition. Вот как это может выглядеть:

Vector3 localMovement = new Vector3(0, -1, 2); // Вектор перемещения в локальном пространстве
Vector3 globalMovement = objectA.transform.TransformDirection(localMovement); // Преобразуем вектор в глобальное пространство
Vector3 targetPosition = rb.position + globalMovement; // Вычисляем конечную позицию в глобальном пространстве

rb.MovePosition(targetPosition); // Перемещаем объект в конечную позицию в глобальном пространстве

Теперь, когда мы вызываем метод MovePosition, объект "objectA" будет перемещен на 2 единицы вперед и 1 единицу вниз в его локальном пространстве.