Привет! Я Денис и я делаю игры на Unity. В этом блоге я делюсь своим опытом в геймдеве и не только.
Навигация в закрепе: https://t.me/spellsingergames/3
Написать в личку: @sinedsem
Post #43
2.05K
Оптимизации в Бурить-Копать!
Поделюсь списком оптимизаций, которые я сделал в нашей игре. После этих оптимизаций FPS на слабом тестовом устройстве поднялся с нестабильных 20-30 до стабильных 40+.
По традиции, рассказываю только то, что мне было не очевидно ранее, то есть делюсь свежайшим опытом.
1) Разделил UI на несколько отдельных
2) Снял галочку
3) В компоненте камеры
4) В
5) Отключил все неиспользуемые Unity пакеты. Не уверен, что это повлияло на производительность, но точно повлияло на размер билда.
6) Постарался избавиться от использования LINQ и сократил выделение памяти (создание новых инстансов объектов) в самой высоконагруженной части кода - в генераторе мира.
7) Начал использовать батчинг при работе с
8) Разобрался со взрывом динамита. Там, кроме всего прочего, была вспышка, сделанная с помощью Particle System. Проблема была в том, что во время первого взрыва игра сильно подтормаживала, а на последующих все было норм. Я сделал warmup шейдера, который использовался для вспышки (Additive), но это не помогло. Профайлер показал, что именно сама система частиц долго стартует в первый раз, и мне пришлось добавить искусственный прогрев частиц - я взрываю один динамит в самом начале игры, без звука и за границами камеры.
#performance
Поделюсь списком оптимизаций, которые я сделал в нашей игре. После этих оптимизаций FPS на слабом тестовом устройстве поднялся с нестабильных 20-30 до стабильных 40+.
По традиции, рассказываю только то, что мне было не очевидно ранее, то есть делюсь свежайшим опытом.
1) Разделил UI на несколько отдельных
Canvas'ов. Смысл был в том, чтобы вынести кликабельные элементы (кнопки) в отдельный Canvas, и только на него повесить Graphic Raycaster, а так же в том, чтобы отделить UI-элементы, которые перерисовываются часто, от тех, которые перерисовываются редко.2) Снял галочку
Raycast Target на некликабельных элементах, но только на тех Canvas, на которых остался Graphic Raycaster. У TMP Text снял все лишние галочки типа Rich Text, а так же постарался избавиться от функции Auto Size, она очень прожорливая.3) В компоненте камеры
Physics 2D Raycaster выбрал только один слой, на который добавил только те объекты мира, по которым можно кликнуть (у меня их всего 2).4) В
CinemachineBrain выбрал Update Method - Smart Update (по умолчанию у меня было Fixed Update, и оно больше тормозило).5) Отключил все неиспользуемые Unity пакеты. Не уверен, что это повлияло на производительность, но точно повлияло на размер билда.
6) Постарался избавиться от использования LINQ и сократил выделение памяти (создание новых инстансов объектов) в самой высоконагруженной части кода - в генераторе мира.
7) Начал использовать батчинг при работе с
Tilemap. Раньше я задавал каждый тайл отдельно через Tilemap.SetTile, теперь я генерирую всю строчку целиком, и вызываю Tilemap.SetTiles. Это дало очень большой прирост производительности.8) Разобрался со взрывом динамита. Там, кроме всего прочего, была вспышка, сделанная с помощью Particle System. Проблема была в том, что во время первого взрыва игра сильно подтормаживала, а на последующих все было норм. Я сделал warmup шейдера, который использовался для вспышки (Additive), но это не помогло. Профайлер показал, что именно сама система частиц долго стартует в первый раз, и мне пришлось добавить искусственный прогрев частиц - я взрываю один динамит в самом начале игры, без звука и за границами камеры.
#performance
- 🔥 11



