UnityのAddressablesは、アセットを「アドレス」で読み込み、使い終わったら解放するための仕組みです。
Resourcesフォルダとの違いから、入れ方、読み込みと解放の基本までを、公式マニュアルで整理しました。
- Package Managerから入れ、Addressables Groupsで設定を作る
- アセットは、アドレス、ラベル、AssetReferenceのどれかで読み込む
- 読み込みはすべて非同期
- 読み込んだ数だけ、解放も必要
Addressablesの実機での再現は含まず、公式ページの記載(2026年9月30日に確認)に基づきます。
仕様や数値は変わることがあるので、最新は公式ページで確かめてください。
バージョンは、Addressables 2.3.16のマニュアルに基づきます。
Addressablesとは
公式の説明では、コンテンツを整理してパッケージにするツールと、実行中にアセットを読み込んで解放するAPIの組み合わせです。
- アドレスでアセットを読み込める
- アセットは、アプリの中に置いても、リモートから配信してもよい
- メッシュ、シェーダー、アニメーションなどの依存関係を、自動で管理する
- 参照カウントでメモリを管理し、プロファイリングの道具もある
- UnityのAssetBundlesの上に作られている
Resourcesフォルダとの違い
Resourcesフォルダは、Resources という名前のフォルダに置いたアセットを、Resources.Load で読み込む仕組みです。
Resourcesの中のアセットは、ビルドに自動で含まれます。
Addressablesでは、アセットにアドレスを付けて、必要なときに読み込みます。
移行のガイドには、次の説明があります。
- ResourcesのアセットをAddressableにすると、Resources_moved という新しいフォルダへ自動で移る
- 既定のアドレスは、元のパスからResourcesのフォルダ名を除いたもの
- Resources.LoadAll に直接対応するものはなく、ラベルで代わりにする
- 解放の処理を、新しく追加する必要がある
Resources.LoadAsync を使っていた書き方は、次のように置き換えられます。
Resources.LoadAsync<GameObject>("desert/tank.prefab");
↓
Addressables.LoadAssetAsync<GameObject>("desert/tank.prefab");Resourcesが非推奨かどうかや、起動時間への影響は、今回の公式ページでは確認できていないので書きません。
パッケージの入れ方
- Window > Package Manager を開く
- パッケージの一覧を「Unity Registry」にする
- Addressablesを選ぶ
- 右下の「Install」を押す
入れたあとは、Addressables Groupsのウィンドウを開き、「Create Addressables Settings」を選びます。
AddressableAssetsData フォルダができ、設定のファイルが入ります。
公式は、このフォルダをバージョン管理に入れるよう書いています。
Addressable Groupsウィンドウ
開き方は、Window > Asset Management > Addressables > Groups です。
| 列 | 内容 |
|---|---|
| Group Name / Addressable Name | グループの名前と、アセットのアドレス |
| Icon | アイコン |
| Path | 元のアセットのパス |
| Labels | 付けたラベル |
ツールバーには、グループを作るNew、ビルドと読み込み先を決めるProfile、Play Mode Script、Buildなどがあります。
アセットをAddressableにする
公式が挙げている方法は4つです。
- アセットのInspectorで、Addressableを有効にする
- InspectorのAssetReferenceのフィールドに、アセットを割り当てる
- Addressables Groupsのウィンドウで、グループへアセットをドラッグする
- Addressableに指定したフォルダの中に、アセットを置く
グループを指定しなければ、既定のグループに入ります。
読み込みの基本
読み込みの方法は3つあります。
- AssetReference:Inspectorに割り当てる
- アドレスの文字列
- ラベル:同じラベルのアセットをまとめて読む
読み込みはすべて非同期で、完了したときに結果を受け取ります。
公式の例は、次の形です。
handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += Handle_Completed;完了したときに、operation.Status が AsyncOperationStatus.Succeeded かどうかで成功を判定します。
解放を忘れない
公式は、読み込んだアセットは使い終わったら解放するよう書いています。
読み込みの呼び出しごとに、対応する解放の呼び出しを対にして、メモリリークを避けます。
参照カウントは、読み込みで増え、解放で減り、0になって初めてアンロードできます。
| 読み込み方 | 解放の書き方 |
|---|---|
| AssetReference | reference.ReleaseAsset() |
| アドレスまたはラベル | handle.Release() |
複数を読むLoadAssetsAsyncや、InstantiateAsyncの解放は、今回確認できていません。
