Оптимизируем физику в Unity: Rigidbody и Timestep | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Алгоритмы и структуры данных Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Разработчик на Spring Framework
-5%
Flutter Mobile Developer NoSQL iOS Developer. Basic
-10%
C++ Developer. Basic C++ Developer. Professional Android Developer. Professional Microservice Architecture Unity Game Developer. Professional Базы данных Node.js Developer React.js Developer Специализация Java-разработчик
-25%
Web-разработчик на Python Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Administrator Linux. Professional Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Microservice Architecture Highload Architect Специализация Administrator Linux
-25%
Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

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

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: рейкастинг».

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

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

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

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

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

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