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

Курсы

Программирование
iOS Developer. Professional Kotlin Backend Developer Flutter Mobile Developer Symfony Framework C++ Developer. Basic Unity Game Developer. Basic Java Developer. Professional
-35%
Highload Architect Unity Game Developer. Professional React.js Developer Специализация Java-разработчик
-25%
Алгоритмы и структуры данных
-16%
Scala-разработчик C# Developer. Professional
-23%
Разработчик голосовых ассистентов и чат-ботов Team Lead Архитектура и шаблоны проектирования NoSQL Web-разработчик на Python Golang Developer. Professional PostgreSQL Vue.js разработчик Супер-практикум по использованию и настройке GIT Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Программист С HTML/CSS
Инфраструктура
Инфраструктурная платформа на основе Kubernetes Microservice Architecture Базы данных Highload Architect Reverse-Engineering. Professional
-8%
Network engineer. Basic Administrator Linux.Basic MongoDB Infrastructure as a code MS SQL Server Developer Cloud Solution Architecture Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по использованию и настройке GIT Разработчик IoT Экcпресс-курс «ELK» Супер-интенсив "Tarantool" Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» Экспресс-курс «Введение в непрерывную поставку на базе Docker»
Корпоративные курсы
Безопасность веб-приложений Экосистема Hadoop, Spark, Hive Пентест. Практика тестирования на проникновение Node.js Developer Java QA Engineer. Basic
-18%
Reverse-Engineering. Professional
-8%
DevOps практики и инструменты NoSQL Reverse-Engineering. Basic Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Game QA Engineer Супер - интенсив по Kubernetes Дизайн сетей ЦОД Экспресс-курс «IaC Ansible» Экспресс-курс по управлению миграциями (DBVC) Экспресс-курс "Версионирование и командная работа с помощью Git" Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Оптимизируем физику в Unity: слои и матрица коллизий

Unity_Deep_15.1-5020-014f91.png

Как правило, игровые объекты в Unity создают на слое Default. В результате всё со всем сталкивается, что не есть хорошо. Но разработчик может обозначить, что и с чем должно взаимодействовать. Для этого ему следует определить различные слои для различных типов объектов, добавляя для каждого нового слоя свою строку и свой столбец. За определение коллизий между слоями отвечает матрица коллизий.

В момент добавления нового слоя матрица коллизий по умолчанию определяет столкновения этого слоя с другими слоями. Выполнив правильные настройки, вы сможете избежать незапланированных столкновений, плюс сможете тестировать события коллизий.

Давайте посмотрим на простую демо-сцену, созданную специально для данной статьи. Демо-сцена имеет внутри контейнера 2 тысячи объектов (тысячу зелёных и тысячу красных).

Зелёные объекты должны взаимодействовать лишь сами с собой, а также со стенами (в нашем случае это слой Wall). При этом в первом тесте все объекты принадлежат слою Default, а столкновения между ними производятся посредством строкового сравнения тега игровых объектов на слушателе коллизий. Что касается второго теста, то в нём объекты разделены на 2 слоя. Взаимодействие слоёв настраивалось в матрице коллизий:

58b62f14_9833_4b28_944f_c57cca6c6ff3_physicsbestpractices01.png.1400x0x1_1-20219-918359.webp

Теперь давайте посмотрим на изображения ниже, которые берутся непосредственно из демонстрации. В ней есть простейший менеджер, считывающий число столкновений каждые 5 секунд. Обратите внимание на число ненужных столкновений в варианте с общим слоем — оно действительно впечатляет.

Число столкновений в течение 5 секунд:

79e98fc2_9b48_4315_b25b_08e012275513_physicsbestpractices02.png.1400x0x1_1-20219-bea523.webp

Теперь посмотрим на результат профилировки для получения более конкретных данных о нашем физическом движке. На картинке ниже общие слои сравниваются с отдельными слоями в данных профилировки:

31c6d758_3439_487c_9c8c_4eddd5813e39_physicsbestpractices03.png.1400x0x1_1-20219-f97152.webp

Заметно, что есть различия по времени, которое затрачивает процессор на физику. На общем слое итоговое значение составляет около 27,7 мс, на отдельных слоях — ~17,6 мс. Как говорится, комментарии излишни.

Источник

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

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

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

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