[[Загрузка файлов|Стартовая страница]] Эти четыре механизма в Unity предназначены для загрузки и управления ресурсами, но они используются в разных сценариях. Разберём их различия: --- ### 1. **[[Resources]]** - **Что это?** Статически загружаемые ресурсы, находящиеся в папке `Resources` внутри `Assets`. Доступ к ним осуществляется через `Resources.Load<T>("path")`. - **Когда использовать?** Когда нужны простые и быстрые загрузки без дополнительных настроек. Однако `Resources` загружаются в память при старте сцены, что может увеличить потребление памяти. - **Минусы:** - Все файлы из `Resources` попадают в билд, даже если не используются. - Нет контроля над загрузкой — ресурсы загружаются сразу в память. - Нет возможности обновлять ресурсы отдельно от основного билда. --- ### 2. **[[Addressables]]** - **Что это?** Современная система загрузки ресурсов, позволяющая динамически загружать и выгружать объекты по строковому ключу (`Addressables.LoadAssetAsync<T>("key")`). Основана на `Asset Bundles`, но автоматизирует их работу. - **Когда использовать?** Если нужны **динамическая загрузка**, **оптимизация памяти**, **возможность обновления контента** и **загрузка ресурсов по сети**. - **Минусы:** - Более сложная настройка по сравнению с `Resources`. - Требует предварительной разметки ассетов и генерации `Addressables Groups`. --- ### 3. **[[Asset Bundles]]** - **Что это?** Это архивы ресурсов, которые можно загружать динамически (`AssetBundle.LoadAsset<T>("asset")`). Они создаются вручную при билде и могут загружаться из локальных файлов или по сети. - **Когда использовать?** Если требуется **модульное обновление контента** без обновления всего билда, например, в DLC или при загрузке ассетов с сервера. - **Минусы:** - Нужно заранее собирать `Asset Bundles`. - Неудобное управление зависимостями (ресурсы могут дублироваться в нескольких бандлах). - Требует дополнительного кэширования и очистки загруженных ресурсов. --- ### 4. **[[AssetDatabase]]** - **Что это?** API для работы с ассетами **только в редакторе Unity**. Позволяет находить, загружать и изменять ассеты (`AssetDatabase.LoadAssetAtPath<T>("Assets/MyAsset.prefab")`). - **Когда использовать?** При разработке инструментов для редактора, редакторских скриптов, импорта/экспорта данных в редакторе. - **Минусы:** - Не работает в билде (`AssetDatabase` отсутствует во время выполнения игры). --- ## **Сравнительная таблица:** |Механизм|Поддержка в билде|Динамическая загрузка|Поддержка обновлений|Сложность использования|Где хранятся?| |---|---|---|---|---|---| |`Resources`|✅ Да|❌ Нет (всё загружается при запуске)|❌ Нет|⭐ Легко|Вшиты в билд| |`Addressables`|✅ Да|✅ Да|✅ Да|⭐⭐⭐ Средне|Локально / сервер| |`Asset Bundles`|✅ Да|✅ Да|✅ Да|⭐⭐⭐⭐ Сложно|Локально / сервер| |`AssetDatabase`|❌ Только в редакторе|✅ Да|❌ Нет|⭐⭐⭐ Средне|В `Assets`| --- ## **Какой выбрать?** - **`Resources`** → Простые проекты без сложного управления ресурсами. - **`Addressables`** → Современный, универсальный способ для большинства игр. - **`Asset Bundles`** → Когда нужна ручная загрузка пакетов ресурсов, например, для модов или DLC. - **`AssetDatabase`** → Только для редакторских инструментов. Если у Вас масштабная RTS с множеством сущностей, `Addressables` будет предпочтительнее, так как позволит загружать ресурсы по мере необходимости и снижать нагрузку на память.