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

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

В этой статье будет рассмотрен процесс создания бандлов и каталога для них.   
О том, как добавить созданный каталог в ресурсы игры, написано [здесь](https://docs.lmr.su/books/gaid-po-moddingu/page/catalogs "catalogs").

### Требования

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

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

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

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

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

### Настройка Addressables

<p class="callout info">Вы можете скачать готовый **[проект](https://docs.lmr.su/books/gaid-po-moddingu/page/gotovyi-proekt-unity "lmr_bundles.zip")** с необходимыми настройками.</p>

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

**Windows -&gt; Asset Managment -&gt; Addressables -&gt; Groups**

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

![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/iUg0UUiGfXu1Kybw-image.png)*Это сообщение появляется только при первом запуске*

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/NoLgc17ELUMPZx20-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/NoLgc17ELUMPZx20-image.png)

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

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

#### AddressableAssetSettings

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/CS4n81KR0Qzx6TS6-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/CS4n81KR0Qzx6TS6-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/v13d4aNZqZ3oO7dp-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/v13d4aNZqZ3oO7dp-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/KEtI1X2gi0s9FP4e-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/KEtI1X2gi0s9FP4e-image.png)

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

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

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/XqQcTvomRhvU3G82-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/XqQcTvomRhvU3G82-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/NRG1JHTf3qw6Y8jH-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/NRG1JHTf3qw6Y8jH-image.png)

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/VOV42LDD5I3VUmu1-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/VOV42LDD5I3VUmu1-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/CRMxj9elNxSIbpWZ-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/CRMxj9elNxSIbpWZ-image.png)

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

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/JKSkAKVfZW5ucIa4-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/JKSkAKVfZW5ucIa4-image.png)

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

1. **Build &amp; Load Paths** Необходимо в списке выбрать **Remote**, чтобы использовались пути, которые мы указали в настройках ассета Addressables.
2. **Use Assets Bundle Cache**  
    Эту настройку необходимо выключить. Значение **Build &amp; Load Paths** может сброситься на **Local** или **&lt;custom&gt;** — в таком случае поменяйте обратно на **Remote.**
3. **Assets Bundle CRC**  
    Эту настройку также необходимо отключить. Нажмите на выпадающий список и выберите там **Disabled**.
4. **Bundle Naming Mode** Настройки нейминга бандлов. Рекомендуется выставить **Append Hash To Filename.**
5. **Prevent Updates (вкладка Content Update Restriction)** Включите данный чекбокс.

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/bczwpzJphk2LMqKb-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/bczwpzJphk2LMqKb-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/zMasYVp145Cvtczr-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/zMasYVp145Cvtczr-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/M8faPqBNwMAGlB8E-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/M8faPqBNwMAGlB8E-image.png)

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

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

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

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

После создания новой группы, удалите группу **Default Local Group (Default)**, либо измените её настройки в соответствии с настройками шаблона **[Packed Assets](https://docs.lmr.su/books/gaid-po-moddingu-20/page/sozdanie-katalogov#bkmrk-%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B-%D0%B3%D1%80%D1%83%D0%BF%D0%BF "Packed Assets")**. Если вы удалите группу, то следующая за ней группа станет группой по умолчанию.

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/oo06U1rrG05xRwOk-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/oo06U1rrG05xRwOk-image.png)

Он определяет, каким образом ассеты внутри группы будут собираться в бандл.  
  
**Pack Together** — все ассеты из группы будут упакованы в один бандл, и, соответственно, в игре будут загружаться одновременно, даже если используется только один ассет из группы. Этот режим рекомендуется ставить, если в группе находятся ассеты от какого-то одного объекта - вроде анимированного фона и частей, из которых он состоит.  
  
**Pack Separately** — для каждого ассета в группе будет создан свой одноимённый бандл, и каждый ассет будет загружаться в игре отдельно, без загрузки остальных ассетов из группы. Этот режим подходит для наборов статичных фонов, текстур и различных звуков. В общем, для всего, что не предполагается загружать одновременно.  
  
**Pack Together By Label** — не используется в модах.  
  
Значения для этого параметра вы должны выбирать сами, исходя из ассетов внутри вашей группы и их назначения — это исключительно вопрос оптимизации.

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

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

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

[![add_to_group.gif](https://docs.lmr.su/uploads/images/gallery/2023-08/L72yBFbBvBKJNDFW-add-to-group.gif)](https://docs.lmr.su/uploads/images/gallery/2023-08/L72yBFbBvBKJNDFW-add-to-group.gif)  
  
Также вы можете нажать на ассет и в окне инспектора включить чекбокс **Addressable** — в таком случае ассет будет добавлен в группу по умолчанию (вы можете перетащить его оттуда в любую группу).

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

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/iacdnNm51Irbqw3A-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/iacdnNm51Irbqw3A-image.png)

<p class="callout warning"> Ключи чувствительны к регистру.</p>

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/fNKbbZtRjTnnBJrY-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/fNKbbZtRjTnnBJrY-image.png)

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

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/mw9Uq0hHho8bCyzY-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/mw9Uq0hHho8bCyzY-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/gdrmSa56imfG88NY-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/gdrmSa56imfG88NY-image.png)

После этого вам необходимо открыть корневую папку вашего проекта в любом файловом проводнике (не в редакторе) и найти там папку **ServerData:**

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/lKDO5drwHh2GqxqL-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/lKDO5drwHh2GqxqL-image.png)

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

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/Vgu8FZyEU0Cr0BYB-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/Vgu8FZyEU0Cr0BYB-image.png)

Переместите все эти файлы внутрь директории вашего мода.   
  
После этого вы сможете указать путь к json-файлу каталога в [resources.yaml](https://docs.lmr.su/books/gaid-po-moddingu/page/catalogs "catalogs") и использовать ассеты из него внутри ресурсов вашего мода.

<p class="callout info">Если вы решите переименовать **.json**-файл каталога, вам нужно будет также изменить название **.hash**-файла.</p>

#### Очистка кэша сборок

Перед каждой сборкой каталога рекомендуем очищать кэш предыдущих сборок. Это можно сделать из меню **Build -&gt; Clean Build Cache -&gt; All** внутри окна групп:

[![image.png](https://docs.lmr.su/uploads/images/gallery/2023-08/scaled-1680-/YeirgwpDJHQIQtZ3-image.png)](https://docs.lmr.su/uploads/images/gallery/2023-08/YeirgwpDJHQIQtZ3-image.png)