UnityのAddressable Assets System(アドレッサブル)は、アセットを動的にロード・管理できる仕組みです。
特に、複数のプラットフォームやサイズの大きなゲームでのメモリ管理とロード時間の改善に役立ちます。
ここでは、基本的な使い方、実践例、メリット、注意点について解説します。
Addressables.LoadAssetAsync<T>("Address")
を使ってアセットを非同期でロードします。Addressables.Release(asset)
でメモリから解放します。using UnityEngine;
using UnityEngine.AddressableAssets;
public class AddressableExample : MonoBehaviour
{
public string assetAddress; // インスペクターで設定できるアセットのアドレス
private GameObject loadedObject;
public void LoadAsset()
{
Addressables.LoadAssetAsync<GameObject>(assetAddress).Completed += handle =>
{
if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
{
loadedObject = handle.Result;
Instantiate(loadedObject);
}
else
{
Debug.LogError("アセットのロードに失敗しました");
}
};
}
public void UnloadAsset()
{
if (loadedObject != null)
{
Addressables.Release(loadedObject);
loadedObject = null;
}
}
}
ゲームのレベル(シーン)ごとにアセットをアドレッサブルで管理すると、メモリ使用量を最適化できます。
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.SceneManagement;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableSceneLoader : MonoBehaviour
{
public string sceneAddress; // 読み込みたいシーンのアドレス
public void LoadScene()
{
Addressables.LoadSceneAsync(sceneAddress, LoadSceneMode.Additive).Completed += OnSceneLoaded;
}
private void OnSceneLoaded(AsyncOperationHandle<SceneInstance> handle)
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
Debug.Log("シーンの読み込み成功");
}
else
{
Debug.LogError("シーンの読み込みに失敗しました");
}
}
public void UnloadScene()
{
Addressables.UnloadSceneAsync(sceneAddress);
}
}