Найти в Дзене
Unity и геймдев | aks2dio

Level up your Unity Web builds

Посматриваю контент с Unite 2025. Подумал полезным подсветить пару моментов из доклада Level up your Web builds и дополнить комментариями. Использование Addressables для всего контента — реально очень важно для веба на Unity. В отличие от JS-движков, где весь контент может грузиться по востребованию, в Unity весь in-game content вне бандлов улетит в .data-файл, который пользователям придётся полностью загрузить перед тем, как попасть в игру. Больше файл ⏩ дольше первая загрузка ⏩ меньше игроков. ☝️ Мало всё выкинуть в бандлы, нужно ещё и выстроить процесс так, чтобы обращение к контенту происходило только тогда, когда он реально нужен. Иначе, например, вместе с .data придётся и бандлы грузить: то на то и выйдет. ☝️ Важно не просто обратиться к динамическому контенту вовремя, а обратиться своевременно, чтобы он успел загрузиться к моменту реальной необходимости. ☝️ Нужно ведь ещё и выгрузить контент из памяти вовремя, чтобы не упереться в ограничения, которые у браузеров достаточно жёст
Оглавление

Посматриваю контент с Unite 2025. Подумал полезным подсветить пару моментов из доклада Level up your Web builds и дополнить комментариями.

1️⃣ Addressables для контента

Использование Addressables для всего контента — реально очень важно для веба на Unity.

В отличие от JS-движков, где весь контент может грузиться по востребованию, в Unity весь in-game content вне бандлов улетит в .data-файл, который пользователям придётся полностью загрузить перед тем, как попасть в игру.

Больше файл ⏩ дольше первая загрузка ⏩ меньше игроков.

☝️ Мало всё выкинуть в бандлы, нужно ещё и выстроить процесс так, чтобы обращение к контенту происходило только тогда, когда он реально нужен.

Иначе, например, вместе с .data придётся и бандлы грузить: то на то и выйдет.

☝️ Важно не просто обратиться к динамическому контенту вовремя, а обратиться своевременно, чтобы он успел загрузиться к моменту реальной необходимости.

☝️ Нужно ведь ещё и выгрузить контент из памяти вовремя, чтобы не упереться в ограничения, которые у браузеров достаточно жёсткие и плавающие.

Принято считать 2 Гб верхней планкой, но эта планка в ряде случаев может очень сильно снижаться.

И т.к. выгрузка (да и загрузка тоже) контента с Addressables — это очень "увлекательно", то этим лучше заниматься с самого начала разработки.

Иначе и в .data, и в памяти будет висеть вечный тех долг.

2️⃣ Особенности бандлов в вебе

По умолчанию в Unity бандлы, включенные в билд, складываются в Streaming Assets. Т.е. в папочку с билдом. И хоть это является формально частью сборки, это всё же отдельные файлы от .data-файла.

Это важно в том контексте, что игра загрузит сразу только необходимые файлы. В т.ч. .data-файл. Но не содержимое Streaming Assets. Файлы бандлов игра будет грузить по востребованию.

Т.е. даже без настройки отдельного CDN для бандлов и Remote доступа, просто даже с Local бандлами, мы уже можем сокращать время загрузки и урезать .data. Ложка мёда в бочке веба.

3️⃣ KTX2

3️⃣ Про KTX2 важно знать. KTX2 лучше жмётся, меньше потребляет памяти, быстрее загружается и, что наверное самое важное, лучше ведёт себя на кросс-платформе (в т.ч. в рамках веба).

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

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

Ранее я для Unity находил только этот репозиторий. Было страшно его затаскивать и ломать все процессы, т.к. Unity не поддерживает этот формат, и всю загрузку с подключением нужно реализовывать динамически через код.

Но в UPM засветился официальный пакет. Проблемы с использованием он похоже пока не решает, но хотя бы появляется чуть больше уверенности в источнике.

Будет повод вернуться к этому вопросу снова.