Addressableとは?
Addressable(アドレサブル)とは、一言でいうと「色んなアセットにアドレスをつけて管理できる機能」のことです。
ではなぜアドレスをつけると便利になるかというと、以下のようなメリットがあるためです。
また似た機能にAsset Bundle、Resourcesが存在しますが様々な問題があるため、多くの場合でAddressableが良いとされています。
基本の使い方
PackageManagerからAddressablesをインストールします。
画像等のアセットに対して、インスペクター最上部にAddressableのチェックボックスが現れます。
チェックを入れるとアドレスが表示されます。 Addressableは、このアドレスを使ってファイルをロードします。
スクリプトでファイルを読み込むには、以下のようなコードを書きます。
using System.Collections; using UnityEngine; using UnityEngine.AddressableAssets; public class AddressableSample : MonoBehaviour { private void Start() { var handle = Addressables.LoadAssetAsync<Sprite>("Assets/Images/Star.png"); handle.Completed += handle => { Debug.Log($"Sprite is loaded. {handle.Result}"); }; } }
Addressables.LoadAssetAsyncは、引数に指定されたアドレスを非同期で読み込み<>で指定した型に変換します。
また、非同期のハンドルAsyncOperationHandleを戻り値として返します。
handle.Completedは、ロード完了時に実行される関数を設定することができます。
また、使い終わったら破棄するのを忘れないようにしましょう。
以下のコードをよしななタイミングで呼び出してください。
Addressables.Release(handle);
ちょっとだけ応用
非同期処理はyield returnを用いてコルーチンとして待機することもできます。
private void Start() { StartCoroutine(LoadSpriteCoroutine()); } private IEnumerator LoadSpriteCoroutine() { var handle = Addressables.LoadAssetAsync<Sprite>("Assets/Images/Star.png"); yield return handle; Debug.Log($"Sprite is loaded. {handle.Result}"); }
非同期処理はasync, awaitを用いて待機することもできます。
private void Start() { LoadSpriteAsync(); } async void LoadSpriteAsync() { var sprite = await Addressables.LoadAssetAsync<Sprite>("Assets/Images/Star.png").Task; Debug.Log($"Sprite is loaded. {sprite}"); }