Файл, URL и идентификатор ресурса
Свяжем файлы проекта с именами, которые использует игровой код.
Манифест перечисляет ресурсы игры. В нём у каждого ресурса есть id, тип и URL. Код использует стабильный идентификатор; Vite формирует адрес файла в сборке.
В assets.manifest.ts import.meta.glob собирает ссылки на файлы, а AssetManifestBuilder превращает их в наборы ресурсов. Запишем этот фрагмент с типом результата glob<string>:
const images = import.meta.glob<string>(
'@game/assets/images/**/*.{png,jpg,jpeg,webp,avif}',
{ eager: true, query: '?url', import: 'default' },
);
Здесь eager: true получает URL сразу. Содержимое изображений при этом не загружается через AssetManager: запросы выполнятся при загрузке соответствующего набора.
Небольшой набор можно собрать вручную:
const bundles = [{
name: 'images',
assets: [{ id: 'images/block.png', type: 'image', importedUrl: blockUrl }],
}] satisfies BundleDescriptor[];
blockUrl — адрес изображения, импортированного с ?url. Тип BundleDescriptor импортируем из @gamedevland/engine/assets. Когда файлов много, AssetManifestBuilder собирает наборы без ручного перечисления.
BundleBuildPolicy определяет группировку. Игра делит музыку и эффекты на audio-music и audio-sfx. Тип ресурса выбирает loader: image, audio, json или font. SDK сам подготавливает загруженное изображение для узла; создавать текстуру в каждом компоненте не нужно.