AssetManager07 / 12

Загружаем нужные наборы

Управляем моментом загрузки и доступом к результату.

AssetManager регистрирует ресурсы, загружает их и хранит результаты. Набор, или bundle, — именованная группа ресурсов, которую удобно загрузить целиком.

В методе runPreload загрузочного сервиса BootPreloadService.ts ресурсы загружаются последовательно:

await this.sceneContext.engine.bootstrapConfigBundles(request.configBundles);
for (const bundleName of request.assetBundles) {
  await this.assets.loadBundle(bundleName);
}

Так код явно определяет порядок групп. Внутри AssetManager запросы ограничены настройками параллельности, повторов и таймаута. Эти параметры не превращают отсутствующий ресурс в допустимое состояние.

ЗарегистрированДвижок знает тип и адрес. Содержимого ещё может не быть.
Загруженget(id) может вернуть результат. Потребитель всё ещё проверяет его тип.
Обе стадии нужны: запись в манифесте и успешная загрузка.

Загрузка сцены

Если набор нужен при входе в сцену, укажем его в SceneConfig.assets:

assets: {
  bundles: ['images', 'fonts'],
  ids: ['json/layouts/scenes/game/layout.json'],
},

Это фрагмент описания сцены. Имена наборов и ID должны присутствовать в манифесте. loadBundle отклоняет неизвестное имя, поэтому опечатка обнаруживается сразу.

load(ids) загружает отдельные ID. has(id) проверяет наличие загруженного результата, get(id) возвращает его. Для JSON дальше используем декодер, а для картинок — стандартный узел или TextureAssetResolver.

loadRequiredBundle(name) после загрузки проверяет наличие каждого результата. Обычный loadBundle сам по себе не гарантирует, что все файлы загрузились: сбои отдельных загрузчиков учитываются внутри координатора. Для обязательных ресурсов выбираем loadRequiredBundle.

Выход из сцены не очищает общий кэш assets: следующая сцена может использовать те же файлы. Публичного метода evict в AssetManager нет.

Источники ↗

Block Puzzle · BootPreloadRequestFactory.ts↗Список наборов Block Puzzle.Block Puzzle · BootPreloadService.ts↗Исходный метод runPreload с последовательной загрузкой наборов.