Орк и Оптимизация | 26 день разработки

Всем привет! Продолжаю делиться прогрессом своей игры в жанре Bullet Heaven. На этот раз был добавлен новый герой - Орк, а также проделана работа по оптимизации больших групп врагов.

Орк не подкастер

Изначальный концепт.
Финальный вариант.

Был добавлен новый герой - Орк в дерзком тигрином наряде, который отвлекает врагов пончиками, а фолловеров деньгами. При атаке кидает пончик в группу врагов, нанося урон и привлекая их внимание на некоторое время. Во время ультимейта открывает чемодан с деньгами, заставляя фолловеров (опыт) бежать к такой легкой наживе.

Оптимизация больших групп врагов

Из-за некоторых механик героев, а именно бафа на увеличенное получение опыта и появления большего количества фолловеров, а также из-за спавна скелетиков из неподобранных фолловеров, возникали жуткие просадки FPS.

В общем было решено упростить некоторые механики, а также добавить оптимизацию для групп врагов:

  • Механика спавна дополнительного опыта убрана, вместо неё просто меняется размер фолловера и получаемое значение опыта.
  • Враги, скелеты и фолловеры вместо постоянного создания просто меняют свой статус на enabled/disabled, а пул объектов создается в самом начале игры.
  • Фолловеры не становятся все разом скелетами, выбирается рандомное время (30-60 секунд), а также навешивается ограничение в виде очереди, что за один раз не может создаться больше 20 скелетов.
  • Враги, скелеты и фолловеры обновляются реже, если находятся вне видимости относительно главного героя.
  • Для атаки ближайших врагов не используется сортировка O(n log n), а просто находится перебором нужное количество целей, в наихудшем случае потратив n итераций, где n - количество врагов.
  • Детекция колизий врагов изменена на дискретную, а также отключил интерполяцию между кадрами у групп врагов (но может быть ещё верну её для плавности).
  • Вместо отдельного апдейта анимации для каждого врага используется общий глобальный счетчик анимации и кадр берется из него.
  • Для атак по области стал использовать spatial grid.
  • При ультимейте Орка фолловеры начинают бежать к чемодану с некоторой задержкой, который зависит от того, как далеко находится чемодан от фолловера.

И много других различных оптимизаций, что позволили держать до 2000 объектов на сцене при 30 FPS. что скорее всего в самой игре не будет достигаться при нормальных условиях:

Без оптимизации фолловеров, в конце видна просадка кадров.
С оптимизацией.

Если у вас также есть идеи как можно оптимизировать менеджмент большого количества объектов в риал тайме, то буду только рад новым идеям! Спасибо, что дочитали!

5
3