Amazonで商品を見るセール会場へ

UnityのAddressablesの基本|Resourcesとの違いと読み込み・解放

UnityのAddressablesは、アセットを「アドレス」で読み込み、使い終わったら解放するための仕組みです。

Resourcesフォルダとの違いから、入れ方、読み込みと解放の基本までを、公式マニュアルで整理しました。

  • Package Managerから入れ、Addressables Groupsで設定を作る
  • アセットは、アドレス、ラベル、AssetReferenceのどれかで読み込む
  • 基本は非同期。同期完了待ちにはプラットフォームと処理上の制限がある
  • 読み込んだ数だけ、解放も必要

Addressablesの実機での再現は含まず、公式ページの記載(2026年9月30日に確認)に基づきます。

仕様や数値は変わることがあるので、最新は公式ページで確かめてください。

バージョンは、Addressables 2.3.16のマニュアルに基づきます。

目次

押さえておきたい最新仕様:Addressables 4.xのマニュアルとの違い

2026年10月12日(日本時間)に、Unity公式のAddressablesパッケージのマニュアルの最新版を見直したところ、表示されたバージョンは4.1.1でした。

この記事の詳しい手順と画面の説明は、冒頭に書いたとおりAddressables 2.3.16のマニュアルに基づいています。

最新のマニュアルでは、次の点が確認できました。

  • Addressablesは、もともとUnityのAssetBundleの仕組みの上に設計されたもので、新しい「コンテンツディレクトリ」のシステムにも対応している
  • 「Choose a content build system」という項目で、コンテンツビルドを作るときに、コンテンツディレクトリかAssetBundleかのシステムを選ぶ
  • 目次には、パッケージの設定、Addressableアセットの作成と整理、ビルド、読み込み、リモートコンテンツの配信と更新、最適化ツール、既知の問題が並ぶ

4.1の公式資料では、コンテンツディレクトリはUnity 6.6以降で利用するローカル配信用の方式です。

リモート配信・コンテンツ更新やUnity 6.6未満ではAssetBundleを選びます。

Package Managerで手元の版を確認し、対応するマニュアルと照合してください。

スポンサーリンク

Addressablesとは

公式の説明では、コンテンツを整理してパッケージにするツールと、実行中にアセットを読み込んで解放するAPIの組み合わせです。

  • アドレスでアセットを読み込める
  • アセットは、アプリの中に置いても、リモートから配信してもよい
  • メッシュ、シェーダー、アニメーションなどの依存関係を、自動で管理する
  • 参照カウントでメモリを管理し、プロファイリングの道具もある
  • 2.3系はAssetBundleを使用する。4.xではコンテンツディレクトリも選択できる

Resourcesフォルダとの違い

Resourcesフォルダは、Resources という名前のフォルダに置いたアセットを、Resources.Load で読み込む仕組みです。

Resourcesの中のアセットは、ビルドに自動で含まれます。

Addressablesでは、アセットにアドレスを付けて、必要なときに読み込みます。

移行のガイドには、次の説明があります。

  • ResourcesのアセットをAddressableにすると、Resources_moved という新しいフォルダへ自動で移る
  • 既定のアドレスは、元のパスからResourcesのフォルダ名を除いたもの
  • Resources.LoadAll に直接対応するものはなく、ラベルで代わりにする
  • 解放の処理を、新しく追加する必要がある

次は呼び出しの比較用断片です。

Resources側は拡張子を省略し、Addressables側はGroupsに登録したアドレスを使います。

例では移行後のアドレスをdesert/tank.prefabとします。

実際のコードでは完了・失敗の処理と、使い終えたハンドルの解放を追加してください。

// 移行前:Resources内の相対パス。拡張子を付けない
Resources.LoadAsync<GameObject>("desert/tank");

// 移行後:Groupsで確認したアドレスを指定する
var handle = Addressables.LoadAssetAsync<GameObject>("desert/tank.prefab");

Resourcesが非推奨かどうかや、起動時間への影響は、今回の公式ページでは確認できていないので書きません。

パッケージの入れ方

  1. Window > Package Manager を開く
  2. パッケージの一覧を「Unity Registry」にする
  3. Addressablesを選ぶ
  4. 右下の「Install」を押す

入れたあとは、Addressables Groupsのウィンドウを開き、「Create Addressables Settings」を選びます。

AddressableAssetsData フォルダができ、設定のファイルが入ります。

公式は、このフォルダをバージョン管理に入れるよう書いています。

Addressable Groupsウィンドウ

開き方は、Window > Asset Management > Addressables > Groups です。

列内容
Group Name / Addressable Nameグループの名前と、アセットのアドレス
Iconアイコン
Path元のアセットのパス
Labels付けたラベル
出典:公式ドキュメント(確認日 2026-09-30)

ツールバーには、グループを作るNew、ビルドと読み込み先を決めるProfile、Play Mode Script、Buildなどがあります。

アセットをAddressableにする

公式が挙げている方法は4つです。

  1. アセットのInspectorで、Addressableを有効にする
  2. InspectorのAssetReferenceのフィールドに、アセットを割り当てる
  3. Addressables Groupsのウィンドウで、グループへアセットをドラッグする
  4. Addressableに指定したフォルダの中に、アセットを置く

グループを指定しなければ、既定のグループに入ります。

あなたはどっち?ResourcesかAddressablesかの判定フロー

アセットの読み込み方法は、次の順で選びます。

  1. Resourcesフォルダに置いたアセットを、そのまま読み込めばよい:Resources.Loadの仕組みです。Resourcesの中のアセットは、ビルドに自動で含まれます。
  2. アセットにアドレスを付けて、必要なときだけ読み込みたい:Addressablesを使います。アドレス、ラベル、AssetReferenceのどれかで読み込みます。
  3. アセットをリモートから配信したい:AddressablesのAssetBundle方式を検討します。4.1のコンテンツディレクトリはローカル配信用です。
  4. Resources.LoadAllのように、まとめて読みたい:直接対応するものはありません。ラベルで代わりにします。
  5. ResourcesからAddressablesへ移す:解放の処理を、新しく追加する必要があります。

Resourcesが非推奨かどうかや、起動時間への影響は、公式ページで確認できていないため、この記事では判断しません。

読み込みの基本

読み込みの方法は3つあります。

  • AssetReference:Inspectorに割り当てる
  • アドレスの文字列
  • ラベル:同じラベルのアセットをまとめて読む

非同期とは、読み込みの完了を待つ間も他の処理を進める方式です。

ハンドルは、処理の状態や結果を取得し、後で解放するために保持する値です。

複数のアセットに同じラベルを付けても、LoadAssetAsyncが返すのは最初に見つかった1件です。

ラベルでまとめて読み込むときは、複数件を扱うLoadAssetsAsyncを使います。

使い分けは、Addressables 2.3.16の単体・複数アセットの読み込みで確認できます。

基本の読み込みAPIは非同期です。

WaitForCompletionで同期的に完了を待つ方法もありますが、メインスレッドの停止やシーン処理のデッドロックに注意が必要です。

2.3.16の公式資料ではWebGLは非対応で、リモートAssetBundleの取得にも使用しないよう説明されています。

次は呼び出し部分だけの断片です。

handleはAsyncOperationHandle<GameObject>、addressは登録済みアドレスの文字列、Handle_Completedは同じ型のハンドルを受け取るコールバックとして別途定義します。

handle = Addressables.LoadAssetAsync<GameObject>(address);
handle.Completed += Handle_Completed;

完了したときに、operation.Status が AsyncOperationStatus.Succeeded かどうかで成功を判定します。

成功時は、完了したハンドルのResultからアセットを取得します。

この呼び出しでPrefabを読み込んだだけでは、シーンにオブジェクトは生成されません。

生成する場合は別途Instantiateを呼び、生成物がアセットを使う間は読み込みハンドルを保持します。

単体読み込みが失敗した場合は、成功時の処理へ進まず、そのハンドルをAddressables.Releaseで解放してください。

解放したハンドルは無効になるため、終了処理でも同じものを再度解放しないよう管理します。

完了・失敗時の分岐は、公式の非同期処理のハンドルを参照してください。

解放を忘れない

公式は、読み込んだアセットは使い終わったら解放するよう書いています。

読み込みの呼び出しごとに、対応する解放の呼び出しを対にして、メモリリークを避けます。

参照カウントは読み込みで増え、解放で減ります。

2.3系のAssetBundle方式では、アセットの参照が0でも所属Bundleが使用中なら、メモリは直ちに解放されません。

Profilerで実際の読み込み・解放を確認します。

読み込み方解放の書き方
AssetReferencereference.ReleaseAsset()
アドレスまたはラベルAddressables.Release(handle)
出典:公式ドキュメント(確認日 2026-09-30)

この表はアセット読み込みの基本例です。

InstantiateAsyncで生成したインスタンスやシーン読み込みには、それぞれのAPIに対応する解放が必要です。

同じハンドルを二重解放せず、利用中のアセットを早く解放しないように管理してください。

詳しくは2.3系のメモリ管理と同期完了待ちの制限を確認してください。

読み込みの件数、失敗時の解放、保持期間を2026年10月26日に2.3.16公式資料で再照合しました。

4.1.1のビルド方式の比較でも、コンテンツディレクトリの対象とローカル配信の制約を確認しています。

スポンサーリンク

導入後に確認すること

  1. Groupsで登録アドレスを確認し、同じ文字列と対象の型を読み込み処理に指定する。
  2. 成功時の状態と取得したアセット名を確認し、必要な生成処理を行う。
  3. 検証用の存在しないアドレスでも試し、失敗時に生成処理へ進まず、ハンドルを解放できるか確認する。
  4. 利用を終えた後に解放し、Profilerでアセットと依存Bundleの状態を確認する。

以上は読者向けの確認手順です。

掲載コードは呼び出しの断片であり、コンパイル・実機ロード・失敗時処理・解放は今回検証していません。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次