Оптимизируем физику в Unity: Rigidbody и Timestep | OTUS

Оптимизируем физику в Unity: Rigidbody и Timestep

unity_Welcome_970x90_копия-20219-071412.jpg

Rigidbody — это компонент, обеспечивающий физическое взаимодействие между объектами. Даже если с коллайдером вы работаете как с триггером, для корректной работы событий OnTrigger вам надо добавить его на игровой объект. Если же игровые объекты не имеют компонента Rigidbody, они рассматриваются как статические коллайдеры. И это очень важный момент, ведь попытка сдвинуть статический коллайдер весьма неэффективна, так как движок заново пересчитывает весь физический мир. Но есть и хорошая новость: профайлер обязательно даст вам понять, что вы пытаетесь сдвинуть статический коллайдер — во вкладке профайлера вы получите соответствующее предупреждение.

Посмотрите на тест ниже. В нём удалены Rigidbody со всех движущихся объектов первой demo-сцены. Кроме того, засняты данные профилировки, что позволяет продемонстрировать, каким образом оказывают влияние ваши попытки сдвинуть статические коллайдеры.

Предупреждение перемещения статических коллайдеров:

physicsbestpractices09_1-20219-8f0982.jpg

Как видно на фото выше, порядка 2 тысяч предупреждений генерируются на каждом игровом объекте. Вдобавок к этому, с ≈17,6 мс до ≈35,85 мс возросли средние затраты времени, которое потратил ЦПУ на физику. Это значит, что когда мы двигаем игровой объект, очень важно добавить на него Rigidbody. Если же вы хотите контролировать его движение вручную, достаточно просто пометить его в свойствах Rigidbody как Kinematic.

Timestep

Timestep — это фиксированные временные участки. Настройка их значения в Time Manager напрямую влияет на частоту обновления физики и FixedUpdate(). Меняя это значение, можно подобрать золотую середины между точностью и временем, которое затрачивается ЦПУ на физику.

Физика: 2D vs 3D

Иногда возникает вопрос, какой физический движок в большей степени подходит для вашего проекта. Тут можно дать следующий совет: если разрабатываете 2D-игру либо игру 2.5D (со псевдотрёхмерностью), то применение физического 3D-движка будет, скорее всего, избыточным, ведь ваш процессор станет впустую нагружаться дополнительным измерением. Впрочем, если интересует более детальная информация и различия между движками, читайте эту статью.

Выводы

Вот мы и подошли к концу нашей серии статей про оптимизацию, первые части которых вы можете почитать здесь: — «Оптимизируем физику в Unity: слои и матрица коллизий»; — «Оптимизируем физику в Unity: рейкастинг».

Помните, что приёмы оптимизации физики, описанные ранее, являются относительно простыми в реализации. Тем не менее они оказывают влияние на производительность вашего проекта, так как практически каждая разрабатываемая игра задействует физический движок, даже если речь идёт лишь об обработке коллизий.

unity_Welcome_970x90_копия-20219-071412.jpg

По материалам статьи «Physics Best Practices»

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто