Показать сообщение отдельно
Старый 13.01.2021, 00:09   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Движение 2D-объектов

Извиняйте что я такой тормоз. Но написать напишу.

Что transform.position/localPosition, что transform.Translate (этим не пользуюсь вообще) изменяют позицию объекта (телепортируют его). Различие в том, что Translate смещает объект на указанное значение, что эквивалентно оператору += при применении совместно с transform.position/localPosition. Есть вероятность, что Translate работает чуть быстрее, т.к. там не надо получать вектор текущей позиции (что по идее делает оператор +=). Стоит об этом заботиться, если с производительностью проблемы и в игре много объектов двигаются, в остальных случаях имхо пофиг.

Что касается RigidBody - если объект физический, то да, двигать надо через свойства компонента RigidBody, а не Transform. И двигать надо в FixedUpdate, т.к. только там физика правильно обрабатывается. При низком FPS применяя силы в Update/LateUpdate можно получить не те результаты, которые предполагаются. И да, если двигаете физические объекты, то есть спец методы у RigidBody: MovePosition и MoveRotation, которые не телепортируют объекты, а двигают/вращают их в течении кадров, в которых физика не обрабатывается (при высоком FPS, об этом ниже). Кстати двигают обычно только кинематические физические объекты (IsKinematic), в остальных случаях к ним прикладывают силы.

На счет отдельного потока не совсем верно, FixedUpdate вызывается столько раз, сколько нужно даже в пределах одного кадра в основном потоке. Если FPS высокий, то FixedUpdate срабатывает не каждый кадр, если низкий (ниже 50 FPS, что установлено в настройках по умолчанию 0,02 секунды), то FixedUpdate может сработать несколько раз за один кадр. В крайних случаях физика может замедляться, т.к. в настройках по умолчанию задано 0,333 секунды - максимальное время на обработку физики за раз. Сама физика считается в отдельных потоках да, но FixedUpdate и Update и LateUpdate и корутины и т.д. всегда вызываются в основном потоке.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
ABTOMAT (13.01.2021), Andvrok (13.01.2021), ant0N (13.01.2021), Randomize (13.01.2021), St_AnGer (13.01.2021)