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

Курсы

Программирование
Python Developer. Professional
-3%
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
Android Developer. Professional
-11%
Microservice Architecture
-5%
C++ Developer. Professional
-5%
Highload Architect
-6%
JavaScript Developer. Basic
-8%
Backend-разработчик на PHP
-9%
Архитектура и шаблоны проектирования C# Developer. Professional
-9%
Team Lead
-6%
Kotlin Backend Developer
-9%
Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Node.js Developer Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Инфраструктурная платформа на основе Kubernetes
-6%
Экспресс-курс по управлению миграциями (DBVC)
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Administrator Linux. Professional
-6%
Разработчик IoT
-13%
Основы Windows Server Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP NoSQL Супер-практикум по использованию и настройке GIT Супер-интенсив «СУБД в высоконагруженных системах» Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+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 комментариев
Для комментирования необходимо авторизоваться