Не понимаю TransformDirection в Unity

Допустим у нас есть куб в нулевых координатах сцены. Я изменяю его позицию, чтобы он сдвинулся вперед на 10 единиц:

transform.position = new Vector3(x, y, 10);

Когда я поверну куб на 45 градусов и снова сдвину его на 10 единиц по оси z, он точно так же сдвинется относительно координат сцены, то есть глобальных координат, он не сдвинется в направлении своей z. Однако же, использование TransformDirection означает преобразование значений вектора из локальных в глобальные:

Vector3 direction = new Vector3(x, y, z); Vector3 worldDirection = transform.TransformDirection(direction); transform.position += worldDirection;

И теперь, если я поверну куб на 45 градусов, то сдвинется он уже относительно своей оси z, так в чем же логика? Получается ведь наоборот, если я не использую TransfromDirection, то объект сам по-себе по дефолту движется по глобальной оси z, а использование TransfromDirection наоборот заставляет объект двигаться по своим собственным координатам.

6 комментариев

Transform.Forward возвращает ориентацию обьекта в глобальных координатах, можно пользоваться им, или похожими (их много)
Есть transform.localPosition - это координаты относительно родителя. Если будет сложная иерархия с поворотами, это будет двигать обьект не глобально.
Так что да, единственное, что делает TransformDirection - преобразует какой-то глобальный вектор в локальные координаты обьекта. Под капотом это выглядит как перевод вектора в новый базис

Ответить

"Так что да, единственное, что делает TransformDirection - преобразует какой-то глобальный вектор в локальные координаты обьекта. Под капотом это выглядит как перевод вектора в новый базис"
Ну то есть получается это просто невнятное описание метода и я правильно это понял?

Ответить