【Unity】【基礎編】Addressablesについて

2024-02-29

調査中の内容につき説明中の内容に間違いがある可能性があります。

API調査、実務編は制作中

確認環境

  • OS:Windows
  • Unity:2023.2.11f1
  • Addressables:1.21.20

Addressables概要

▶ Addressable Asset System(Addressables)でランタイムのアセット管理システムです。

▶ データをこの管理システムから取得できます。

▶ そのほかにもAssetBundle特有の依存管理、メモリ管理やデータのパッキング等も設定でき、より実務向けな対応が可能になっています。

<Unity公式>

Addressables導入、データ準備

  • Window>Asset Management>Addressables>Groupsを選択
  • 初回はCreate Addressables Settingsを選択
  • Assets直下に色々データが作られる
  • 任意の場所(Assets>AddressableData)にテクスチャを追加
  • 対象のテクスチャに対してAddressableチェックを付ける

  • もう一度Window>Asset Management>Addressables>Groupsを選択するとDefaultLocalGroupに追加されている

ゲーム内で動作コード実装

  • データを呼び出してSpriteを適用する
  • データを受取後、確実にデータが存在する前提で処理をしているので実際はチェック処理等入れる必要があります
[RequireComponent(typeof(Image))]
public class AddressableTest : MonoBehaviour
{
    [SerializeField]
    private Image img;

    // Start is called before the first frame update
    void Start()
    {
        img = this.gameObject.GetComponent<Image>();
        LoadAsset("portrait_kohaku_01");
    }

    private async void LoadAsset(string key)
    {
        AsyncOperationHandle<Sprite> asyncOH = Addressables.LoadAssetAsync<Sprite>(key);
        await asyncOH.Task;
        img.sprite = asyncOH.Result;
        Addressables.Release(asyncOH);
    }
}

結果

無事適用されました

最後にまとめ

  • 今回は単純に設定して適用という手順を説明しました。
  • もう少し込み入った手順については応用編で説明します。

おまけ

Addressableってメモリとか設定の仕方とかぱっと見わかりにくいですよね!

Unityをある程度経験している人にはこれで伝わりやすいかもしれません。

Resources.Load+UnityWebRequest=(大体)Addressables

※だいたいの使われるイメージ

Addressables以前のお話し

  • ソシャゲ等の大規模開発ではローカルで使用するデータ、リモートからDLするデータに分かれている
  • これをそれぞれResources.LoadやUnityWebRequestを使用して実装していた
  • 例えば常設で使用するUI等のデータはローカルデータ、イベント等で非常設データはリモートからみたいに分けている
  • 上記の管理システムを各自独自に作っていたが、Addressables登場でこっちを使うようになった(のかもしれない
  • 他にも様々な便利機能が入っているので今後の検証に期待