Найти в Дзене
3D Alexx

Использование Addressables в Unity3D

Addressables следует применять в следующих случаях: Бонус: Addressables можно использовать для оценки объема ресурсов, связанных с конкретной сценой. Addressables устанавливается через Package Manager в три простых шага: Контент можно добавить двумя способами: Во втором случае контент добавится в группу по умолчанию, которую можно изменить, кликнув правой кнопкой мыши по группе и выбрав "Set as Default". Пример кода для загрузки спрайта в UI: using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;
public class AddressablesSpriteLoader : MonoBehaviour
{
[SerializeField] AssetReference loadableSprite;
[SerializeField] Image uiImage;
private async void Start()
{
AsyncOperationHandle<Sprite> handle = loadableSprite.LoadAssetAsync<Sprite>();
await handle.Task;
if (handle.Status == AsyncOperationStatus.Succeeded)
{
uiImage.sprite = handle.Result;
Оглавление

Addressables следует применять в следующих случаях:

  • Разделение сборок: Когда проект становится слишком большим, и сборка всех ассетов занимает много времени. В таких ситуациях можно собрать ресурсы один раз, а исполняемую часть проекта — значительно быстрее, что позволяет оперативно исправлять ошибки в коде.
  • Загрузка ресурсов через сеть: Это позволяет создавать легковесные исполняемые файлы, в то время как тяжелые графические и аудио ресурсы будут загружаться с сервера.
  • Снижение потребления памяти: При традиционном подходе все префабы и связанные с ними ресурсы загружаются в память сразу при загрузке сцены. Addressables позволяет загружать и выгружать ресурсы по мере необходимости.
  • Ускорение загрузки уровней: Можно показать пользователю низкополигональные модели и текстуры низкого разрешения при старте уровня, а более качественные загружать по мере взаимодействия с сценой, избегая задержек.

Бонус: Addressables можно использовать для оценки объема ресурсов, связанных с конкретной сценой.

Установка Addressables

Addressables устанавливается через Package Manager в три простых шага:

  1. Открыть окно с группами.
  2. Создать файл настроек.
  3. По умолчанию будет создана одна группа, которая упаковывает свои ресурсы в отдельный файл. Новую группу можно создать, нажав правой кнопкой мыши.

Как сделать контент загружаемым через Addressables

Контент можно добавить двумя способами:

  1. Перетянув файл в группу.
  2. Установив галочку в инспекторе рядом с надписью Addressable.

Во втором случае контент добавится в группу по умолчанию, которую можно изменить, кликнув правой кнопкой мыши по группе и выбрав "Set as Default".

Использование контента из Addressables

Пример кода для загрузки спрайта в UI:

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.UI;

public class AddressablesSpriteLoader : MonoBehaviour
{
[SerializeField] AssetReference loadableSprite;
[SerializeField] Image uiImage;

private async void Start()
{
AsyncOperationHandle<Sprite> handle = loadableSprite.LoadAssetAsync<Sprite>();
await handle.Task;
if (handle.Status == AsyncOperationStatus.Succeeded)
{
uiImage.sprite = handle.Result;
Addressables.Release(handle);
}
}
}

Пример кода для инстанцирования префаба:

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class AddressablesPrefabInstantiator : MonoBehaviour
{
[SerializeField] AssetReference loadablePrefab;

private async void Start()
{
AsyncOperationHandle<GameObject> handle = loadablePrefab.LoadAssetAsync<GameObject>();
await handle.Task;
if (handle.Status == AsyncOperationStatus.Succeeded)
{
Instantiate(handle.Result);
Addressables.Release(handle);
}
}
}

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

using UnityEngine;
using UnityEngine.AddressableAssets;

public class SceneLoader : MonoBehaviour
{
[SerializeField] private AssetReference scene;

public void LoadScene()
{
scene.LoadSceneAsync(UnityEngine.SceneManagement.LoadSceneMode.Single);
}
}

При этом не забудьте сделать файл сцены Addressable и установить ссылку в инспекторе. Учтите, что ресурсы, необходимые для сцены, будут упакованы в файл группы, к которой она относится.

Сборка исполняемого билда

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

Загрузка контента через сеть

Для загрузки файлов через интернет в Addressables предусмотрена специальная опция, которую можно активировать в разделе Profiles, указав ссылку на сервер и установив LoadPath в значение RemoteLoadPath.

Оптимизация потребления памяти

Чтобы выгружать ненужные объекты из памяти, используйте следующий код:

using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;

public class AddressablesPrefabInstantiator : MonoBehaviour
{
[SerializeField] AssetReference loadablePrefab;

public void MakeInstance()
{
StartCoroutine(MakeInstanceCoroutine());
}

private IEnumerator MakeInstanceCoroutine()
{
var result = Addressables.InstantiateAsync(loadablePrefab);
yield return new WaitForSeconds(5);
Addressables.ReleaseInstance(result);
}
}

Важно не использовать Destroy для удаления объектов, а вместо этого вызывать Addressables.ReleaseInstance, чтобы правильно управлять ссылками на ресурсы.

😊