しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity の Addressables を使ってみる

※ これは 2022/07/22 時点の Unity 2022.1.10f1 Addressables v1.20.3 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

Aseprite に慣れてきたのでまた Unity に戻り、Addressables というパッケージライブラリを使ってみたい

Addressables パッケージ

Resources ディレクトリを使用する方法とちがい、ローカルアセットもどこかの配信サーバーに置いたリモートアセットも同じような取り扱いで読み込めるようになるらしい

とりあえず使えるようになるような設定まで

まずは UnityEditor のメニューから [Window] - [Asset Management] - [Addressables] - [Groups] を選び、Addressables Groups のダイアログを表示

Addressables Group

するとおもむろに「Create Addressables Settings」のボタンが表示されるので押下

Create Addressables Settings ボタン

これでデフォルトの設定が新規作成され、Addressables Groups のダイアログに Default Local Group が表示される

プロジェクト内に配置した適当なねこ Sprite をこの Default Local Group にドラッグドロップで追加登録

Default Local Group にアセットを追加登録

次に Play Mode Script のコンボボックスから「Use Existing Build」を選択

Use Existing Build

さらに Build コンボボックスから 「New Build」-「Default Build Script」を選択して Addressables アセットのビルドを実行

アセットビルド

これで使えるようになったはず

試しに下記のような Image を画面中央に置いただけのシーンを作成

Image がど真ん中にあるシンプルなシーン

「Test」の GameObject に下記のような Test.cs のスクリプトを貼り付け、Image コンポーネントを Test.thumbnailImage に設定した

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

public class Test : MonoBehaviour
{
    [SerializeField]
    private Image thumbnailImage = null;

    private AsyncOperationHandle<Sprite> handle = default;

    public async void Start()
    {
        // Addressables 経由で Sprite を読み込んで表示
        this.handle = Addressables.LoadAssetAsync<Sprite>("Assets/Sprites/cat.png");
        this.thumbnailImage.sprite = await this.handle.Task;
    }

    public void OnDestroy()
    {
        // いらなくなったら handle を Release する
        Addressables.Release(this.handle);
    }
}

LoadAssetAsync に指定するアドレスは Addressables Groups のウィンドウの 「Addressables Name」や、登録した Sprite を Inspector で表示した際に 「Addressables」の横に表示される Assets/Sprites/cat.png を指定する

アセットのアドレス

お試し実行

Addressables 経由で表示