AssetBundleとAddressables

環境

Unity2021.2.19f1

本題の前に

アセットと言われるとどうしても、様々な物が含まれている物を1つにまとめた奴、
っていうイメージが自分にはついてしまっている
実際には画像や音声、テキスト、モデル、プラグインとかのゲームを構成するファイルの総称っぽい
参考
サポートするアセットタイプ - Unity マニュアル
で、asset 自体は資産・財産・有用な物っていう日本語になるみたいだけど、ちょっと違うよなぁってなって
良い言い換えないかなぁってなったんだけど、
芸術・工芸はどっちかというと物質な部分が多いし、構成品は音声やモデルに想像が行きにくい、
創作品だと総称というよりかは完成形だし・・・
源成物(造語)だと壮大すぎる、作成物はそのまま・・・いやそのままならいいんじゃないか・・・?
品だと完成形っぽいけど物だと単体っぽい感じ(本来の違いは知らん、品と物の違いを調べようとしたら汚染がひどい)

ので、ここではアセットを作成物と呼称して押し付けていく

ついでにbundleは束とか塊とかまとめるとかそんな意味らしい
つまり AssetBundle は 作成物まとめ ということになる
おっ、一気に俗臭くなったな!

AssetBundle

上に書いたが「AssetBundle」を「作成物まとめ」として解釈する

で、
アセットバンドルのワークフロー - Unity マニュアル
に書いてある、「バリアント」を
AssetBundleのVariantsを完全に理解する - Qiita
を元に「版」(決定 版、HD 版とかの版)として解釈すると
「3. Inspector ウィンドウの下部に、アセットバンドルとバリアントを割り当てるセクションがあります。左側のドロップダウンでアセットバンドルを割り当て、右側のドロップダウンでバリアントを割り当てます。」

「3. Inspector ウィンドウの下部に、まとめ先と何版かを割り当てる場所があります。左側でまとめ先、右側で版を割り当てます。」
と解釈できる、簡単だな!

で、この作成物まとめを作るには
アセットバンドルのワークフロー - Unity マニュアル
1. 各作成物のまとめ先と何版かを割り当てる
2. UnityEditor内で動くプログラムで各作成物まとめを作る(アセットバンドルをビルドする)
3. 作った各作成物まとめの中から色んな作成物をロードする
という流れらしい
面倒だな!!特に1.!!!

この作成物まとめを作る利点は・・・
圧縮とメモリの節約・・・ってことらしい・・・たぶん
あとはResourcesの起動遅い問題が解決する・・・とは書いてないけどたぶん解決する・・・

Addressables

この辺とか
Addressable Assets Systemをちゃんと導入するための技術検証まとめ – てっくぼっと!
この辺とか
Addressable Assets Systemを完全に理解する - Qiita
から見るに、「作成物」と「付けた名前」の間にある実行環境や版毎に違うパスや依存関係をうまく処理してくれる何か・・・
AssetBundleとは別物・・・っぽい・・・

とりあえず
初めに | Addressables | 1.20.5
に書いてある通りに
Addressablesを入れる、グループを作る、作成物のInspectorの一番上にあるAddressableを有効にする、
サンプルコード通りに入れる(addressはAddressablesGroupsウィンドウの左側の名前(AddressableName)にした)
で、前回のと同じ条件でロード方法を次のようにした

async void loadA() {
        var handle = Addressables.LoadAssetAsync<Sprite>("Assets/Gaibu/128.png");
        var sp = await handle.Task;
        spriteStack.Push(sp);
        Addressables.Release(handle);
}

非同期処理?知らねぇなぁ!!!!

で、これの平均時間は0.039秒だった
遅い時は0.06秒ぐらい、早い時は0.027
秒ぐらいだった
Resources.Loadよりは遅いがその他手法に比べれば早いって感じ
まぁ依存関係とか割り当てとかの処理で遅くなってるんだろうなぁって感じ

えっ、非同期にすればもっと早いって?
貴様には消えてもらう

とりあえずAssetBandleとかいう作成物まとめは気にしない方向で
Addressablesを用いる前提でファイル更新時の置き換え自動化処理にいってみる


nsan.hatenablog.com