Орк и Оптимизация | 26 день разработки
Всем привет! Продолжаю делиться прогрессом своей игры в жанре Bullet Heaven. На этот раз был добавлен новый герой - Орк, а также проделана работа по оптимизации больших групп врагов.
Орк не подкастер
Был добавлен новый герой - Орк в дерзком тигрином наряде, который отвлекает врагов пончиками, а фолловеров деньгами. При атаке кидает пончик в группу врагов, нанося урон и привлекая их внимание на некоторое время. Во время ультимейта открывает чемодан с деньгами, заставляя фолловеров (опыт) бежать к такой легкой наживе.
Оптимизация больших групп врагов
Из-за некоторых механик героев, а именно бафа на увеличенное получение опыта и появления большего количества фолловеров, а также из-за спавна скелетиков из неподобранных фолловеров, возникали жуткие просадки FPS.
В общем было решено упростить некоторые механики, а также добавить оптимизацию для групп врагов:
- Механика спавна дополнительного опыта убрана, вместо неё просто меняется размер фолловера и получаемое значение опыта.
- Враги, скелеты и фолловеры вместо постоянного создания просто меняют свой статус на enabled/disabled, а пул объектов создается в самом начале игры.
- Фолловеры не становятся все разом скелетами, выбирается рандомное время (30-60 секунд), а также навешивается ограничение в виде очереди, что за один раз не может создаться больше 20 скелетов.
- Враги, скелеты и фолловеры обновляются реже, если находятся вне видимости относительно главного героя.
- Для атаки ближайших врагов не используется сортировка O(n log n), а просто находится перебором нужное количество целей, в наихудшем случае потратив n итераций, где n - количество врагов.
- Детекция колизий врагов изменена на дискретную, а также отключил интерполяцию между кадрами у групп врагов (но может быть ещё верну её для плавности).
- Вместо отдельного апдейта анимации для каждого врага используется общий глобальный счетчик анимации и кадр берется из него.
- Для атак по области стал использовать spatial grid.
- При ультимейте Орка фолловеры начинают бежать к чемодану с некоторой задержкой, который зависит от того, как далеко находится чемодан от фолловера.
И много других различных оптимизаций, что позволили держать до 2000 объектов на сцене при 30 FPS. что скорее всего в самой игре не будет достигаться при нормальных условиях:
Если у вас также есть идеи как можно оптимизировать менеджмент большого количества объектов в риал тайме, то буду только рад новым идеям! Спасибо, что дочитали!