Оптимизируем физику в Unity: рейкастинг
Рейкастинг — полезный и довольно мощный инструмент в физическом движке. Он даёт возможность направлять луч какой-нибудь длины в определённом направлении, получая информацию о произошедших столкновениях.
Предлагаем вам ряд советов по применению рейкастинга:
— очевидно, но факт: стремитесь к наименьшему числу лучей;
— не стоит делать лучи длиннее, чем это действительно надо, ведь чем длиннее будет луч, тем больше объектов придётся проверять на столкновение;
— не стоит применять рейкасты внутри метода
Как это выглядит на практике
Теперь рассмотрим простую демо-сцену, в которой объект стреляет лучами, которые сталкиваются лишь с зелёными объектами.
Простая демо-сцена с рейкастами:
Здесь, чтобы получить данные профилировки, ведётся управление числом и длиной лучей. Давайте посмотрим на них на графике, где представлена зависимость производительности от числа лучей:
А теперь посмотрим на зависимость производительности от длины лучей:
А теперь посмотрим, что произойдёт, если мы поменяем примитивные коллайдеры на меш-коллайдеры. Меш-коллайдеры на сцене (110 полигонов на коллайдер):
Примитивные коллайдеры по сравнению с меш-коллайдерами в данных профилировки:
Как вы видите на данных профилировки, рейкастинг меш-коллайдеров заставляет физический движок работать больше.
По материалам статьи «Physics Best Practices»
Также возможно вам будет интересно: — «Оптимизируем физику в Unity: слои и матрица коллизий».