transform в unity3d (2d)
недавно начал юзать юньку. в чем разница между transform.position и transform.Translate? в обоих случаях персонаж передвигается. что лучше использовать?
недавно начал юзать юньку. в чем разница между transform.position и transform.Translate? в обоих случаях персонаж передвигается. что лучше использовать?
Согласно документации по Transform.Translate(), метод принимает опциональный параметр Space relativeTo = Space.Self
, который определяет вектор, относительно которого будет перемещаться объект.
Различия можно увидеть, если создать на сцене три объекта, к каждому из которых привязать соответствующий скрипт:
PositionMovement
- перемещает объект, изменяя transform.position
:
void Update ()
{
transform.Rotate(Vector3.up * 10f * Time.deltaTime);
transform.position += Vector3.forward * Time.deltaTime;
}
TranslateSelfMovement
- перемещает объект, вызывая метод transform.Translate
с параметром Space.Self
(используется по-умолчанию, если опущен)
void Update ()
{
transform.Rotate(Vector3.up * 10f * Time.deltaTime);
transform.Translate(Vector3.forward * Time.deltaTime);
}
TranslateWorldMovement
- перемещает объект, вызывая метод transform.Translate
с параметром Space.World
:
void Update ()
{
transform.Rotate(Vector3.up * 10f * Time.deltaTime);
transform.Translate(Vector3.forward * Time.deltaTime, Space.World);
}
Как Вы можете заметить, каждый объект дополнительно вращается вокруг вертикальной оси.
Запустив данный пример, Вы увидите, что один объект описывает круги (со скриптом TranslateSelfMovement
), а два другие устремились вперед.
Если чуть-чуть подкорректировать каждый скрипт, заменив Vector3.forward
на transform.forward
, то все объекты будут описывать круги, но у объекта со скриптом TranslateSelfMovement
радиус круга будет отличаться: