0
Help us understand the problem. What are the problem?

posted at

updated at

UnityのAddressables Asset System リソース管理 戦果

Addressablesなんもわからんからある程度使えるようになったのでメモ。

ポイント

  1. ロード
  2. 依存関係
  3. アンロード
  4. Prefab
  5. ハマりポイント

1. ロード

ロードは簡単。

AsyncOperationHandle<Sprite> handle;
handle = Addressables.LoadAssetAsync<Sprite>("HouseSprite");

Sprite sprite = await handle.Task;;
spriteRenderer.sprite = sprite;

※UniTask使用

2.依存関係

前提としてAddressableのGroupがAssetBundle一つ分の扱いになる。

ポイント

  1. 参照しているAssetも一緒にロードしてくれる
  2. 参照しているAssetは同じAssetBundleに含まれる
  3. 複数に参照されるAssetは直接AssetBundleに含ませる

2.1参照しているAssetも一緒にロードしてくれる

Sprite A は Texture B を含んでいる(を参照している)。
Addressables では A をロードすると
参照している B もロードしてくれる。

AssetBundle時代はこの仕組みを自作しなければならなかったらしい...。

2.2参照しているAssetは同じAssetBundleに含まれる

Sprite A を Addressable化すると、Texture B も同じAssetBundleに含まれる。
このときTexture B は 直接ロードすることはできない。

2.3複数に参照されるAssetは直接AssetBundleに含ませる

Sprite A (Texture B)
Sprite C (Texture B) をAddressable化した時

A と C のそれぞれに B が含まれることになり
A と C をロードすると、B が二個もロードされることになる。

B も直接Addressable化することで
A と C に含まれる B は同一のものになり無駄がなくなる。

3. アンロード

Addressables.Release(handle);

もしくは

Addressables.Release(sprite);

上記の二つの方法でアンロードしてみたところ
Sprite本体と、参照しているTextureのどちらも解放された。

(Unity の Sprite は Texture2Dの参照を持っているテキストファイルのようなもの)

4. Prefab

Addressables.InstantiateAsync("Hoge");
Addressables.ReleaseInstance(instance)

があるが、この場合だと勝手にインスタンスの数を数えておいてくれる。
ReleaseInstanceで0になった時に使用しているMaterialやTextureを解放してくれる。

ちゃんと数の管理が自分でできるなら

handle = Addressables.LoadAssetAsync<GameObject>("HogePrefab");
GameObject prefab = await handle.Task;;
GameObject instance = Instantiate(prefab);
Addressables.Release(prefab);

でも問題なさそう。

5. ハマりポイント

アンロードした際に、プロファイラを見ると
TextureやMaterial, Assetが減っておらず、「アンロードされていない!?」と焦った。
実際Editor上ではアンロードされていない。

原因はAddressablesのPlayMode。三種類あるうちの
Use Existing Build(requires built groups)
を選択することでアンロードされているのを見ることができる。

ほかの選択肢の状態では、実機とは異なる動作のためアンロードされず
ビルド時にはちゃんとアンロードされるようになる。
(どうやらAssetDatabese経由)

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?