Создание каталогов

Каталоги нужны для подгрузки каких-либо ассетов Unity из бандлов.

В этой статье будет рассмотрен процесс создания бандлов и каталога для них.
О том, как добавить созданный каталог в ресурсы игры, написано здесь.

Требования

У вас должны быть хотя бы минимальные знания по работе с редактором Unity и представление об ассет-бандлах.

Для продолжения вам понадобится редактор Unity 2022.3.6 с пакетом Addressables 1.21.15, который можно установить через менеджер пакетов внутри редактора.

Работоспособность каталогов в LMR не гарантируется при использовании других версий редактора/пакета Addressables.

Платформа сборки

Каталоги собираются под текущую активную плафторму в редакторе Unity. Её можно узнать, нажав на File -> Build Settings в меню редактора Unity или нажав Ctrl + Shift + B.

Если вы хотите, чтобы ассеты из каталогов работали на нескольких платформах (Windows, Android, Linux и т.п.) — вам нужно собирать их отдельно под каждую платформу.

Настройка Addressables

Вы можете скачать готовый проект с необходимыми настройками.

После установки редактора и пакета, откройте окно редактирования групп Addressables:

Windows -> Asset Managment -> Addressables -> Groups

Если вы открываете это окно в первый раз, у вас появится сообщение о необходимости создать настройки Addressables. Нажмите Create Addressables Settings.

image.pngЭто сообщение появляется только при первом запуске

После того, как завершится создание настроек, вы увидите следующее окно:

image.png

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

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

AddressableAssetSettings

При помощи проводника проекта (по умолчанию располагается в самом низу окна редактора), найдите ассет AddressableAssetSettings, полный путь которого:
Assets/AddressableAssetsData/AddressableAssetSettings.asset

image.png

Кликните на него — в правой части окна редактора появится Inspector с настройками:

image.png

Для начала нам необходимо изменить настройки профиля по умолчанию, для этого кликните на Manage Profiles во вкладке Profiles, появится следующее окно:

image.png

Здесь нам нужно поменять настройки Remote. Нажмите на выпадающий список напротив и выберите в нём Custom.

Измените значение Remote.BuildPath на следующую строчку:
ServerData/[BuildTarget]

Затем измените значение Remote.LoadPath:
{LMR_MOD_ROOT}

Должно получиться так:

image.png

Закройте окно. Далее возвращаемся обратно к окну инспектора, и включаем чекбокс Build Remote Catalog во вкладке Catalog:

image.png

Убедитесь, что в выпадающем списке Build & Load Paths выбрано значение Remote с настройками, что мы указывали в профиле. У Build Path вместо [BuildTarget] будет указана ваша платформа — это нормально.

В этой же вкладке включаем чекбокс Only update catalogs manually:

image.png

Последняя настройка, которую нам нужно изменить у данного ассета — это Strip Unity Version from AssetBundles, которая находится на вкладке Build — её необходимо включить:

image.png

Шаблоны групп

Далее нам необходимо изменить настройки по умолчанию для создаваемых групп. Они хранятся в файле Assets\AddressableAssetsData\AssetGroupTemplates\Packed Assets.asset.

Находим этот файл, кликаем по нему и видим следующее:

image.png

Здесь нас интересуют следующие настройки:

  1. Build & Load Paths
    Необходимо в списке выбрать Remote, чтобы использовались пути, которые мы указали в настройках ассета Addressables.

  2. Use Assets Bundle Cache
    Эту настройку необходимо выключить. Значение Build & Load Paths может сброситься на Local или <custom> — в таком случае поменяйте обратно на Remote.

  3. Assets Bundle CRC
    Эту настройку также необходимо отключить. Нажмите на выпадающий список и выберите там Disabled.

  4. Bundle Naming Mode
    Настройки нейминга бандлов. Рекомендуется выставить Append Hash To Filename.

  5. Prevent Updates (вкладка Content Update Restriction)
    Включите данный чекбокс.

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

image.png

Далее вернёмся к окну Addressables Groups. В нём сейчас всего две группы: Built In Data и Default Local Group (Default):

image.png

Нажмите на Built In Data и отключите оба чекбокса в инспекторе:

image.png

Создание групп

Как было сказано ранее, внутри окна Addressables Groups создаются различные группы ассетов — из этих групп после сборки будут созданы бандлы. Каждая группа — отдельный бандл, в котором хранятся ассеты (зависит от режима сборки, о нём будет далее).

Чтобы создать группу, нажмите правкой кнопкой мыши по свободному месту в окне и выберите Create New Group -> Packed Assets. По умолчанию название будет Packed Assets, но вы можете изменить его, кликнув правой кнопкой мыши по группе и выбрав соответствующий пункт в меню. Названия групп не играют важной роли и могут быть любыми.

Удаление группы Default Local Group (Default)

После создания новой группы, удалите группу Default Local Group (Default), либо измените её настройки в соответствии с настройками шаблона Packed Assets. Если вы удалите группу, то следующая за ней группа станет группой по умолчанию.

Режим сборки ассетов

Этот параметр называется Bundle Mode, его можно найти в окне инспектора, кликнув по любой группе:

image.png

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

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

Pack Separately — для каждого ассета в группе будет создан свой одноимённый бандл, и каждый ассет будет загружаться в игре отдельно, без загрузки остальных ассетов из группы. Этот режим подходит для наборов статичных фонов, текстур и различных звуков. В общем, для всего, что не предполагается загружать одновременно.

Pack Together By Label — не используется в модах.

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

Если вы добавите в группу папку — все ассеты внутри неё будут загружаться в игре одновременно, даже если у группы стоит Pack Separately. По сути, папка - это группа внутри группы.

Добавление ассетов в группу

Чтобы добавить какой-либо ассет в группу, нужно перетащить его в необходимую группу внутри окна. 

add_to_group.gif

Также вы можете нажать на ассет и в окне инспектора включить чекбокс Addressable — в таком случае ассет будет добавлен в группу по умолчанию (вы можете перетащить его оттуда в любую группу).

Нейминг ассетов

После добавления ассета в группу, ему будет присвоено имя, соответствующее его пути внутри проекта. Такое имя называется адресом ассета (или его ключом) — именно на это имя вы будете ссылаться для загрузки ассета внутри файла ресурсов мода — resources.yaml. 

Чтобы изменить имя, кликните по ассету в группе правой кнопкой мыши и выберите Change Address:

image.png

 Ключи чувствительны к регистру.

Сборка каталога

После того, как вы создали все необходимые группы и добавили в них ассеты, вам нужно собрать бандлы и каталог для них. Делается это достаточно просто, для этого нужно в окне с группами нажать Build -> New Build -> Default Build Script:

image.png

Если это первая попытка сборки, то редактор спросит вас о необходимости включить новую систему отчётов — рекомендуем согласиться.

Если всё прошло хорошо, в консоли редактора появится следующее сообщение:

image.png

А также откроется окно с отчётом, если вы его включили: