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

Оптимизируем физику в 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 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто