Addressable Assets System について
AddressableAssetsSettings から Label を削除したら
と言われた。
ビルドすると、Entry についてて Settings に無いラベルは削除されるのか。
AAS 追加時の Address を自動で決定させるためのアイディア
AddressableAssetSettings.OnModificationGlobal += (addressableAssetSettings, modificationEvent, target) =>
{
if (modificationEvent != AddressableAssetSettings.ModificationEvent.EntryMoved || !(target is List<AddressableAssetEntry> entries))
{
return;
}
foreach (var entry in entries)
{
entry.SetAddress(/* ココを組む */);
}
};
何故か EntryCreated
とか EntryAdded
とかが反応せず…。
Content State を読み込ませつつビルドする場合は以下のページを参照する。
Addressables.DownloadDependenciesAsync() が返す AsyncOperationHandle
の .PercentComplete
の初期値が 0.75
とか 0.875
とかになる問題。
ググったら安定の baba-s さんの記事 がヒットしたが、解決策は書いていなかった。
もう少し深追いしたら公式 Forum のスレッドもヒット。
曰く AsyncOperationHandle.GetDownloadStatus().Percent
を使いなさいとのコト。
試してみたら、多少マシになったけど、まだ揺れがある。
(0.0
からスタートするヤツもあったけど、0.5
とか 0.6
くらいからスタートするヤツもある。)
ので、現時点(Addressables v1.16.16)では素直(?)に 0.75
を定数値として引いた値を計算に用いるとヨサソウ。
Play Mode Script が Use Exising Build の時に LoadPath が LocalLoadPath な Group のアセットをエディタ実行時に読み込むのってどうやれば良いんだ?
Assets/StreamingAssets/aa/
以下は AddressablesPlayerBuildProcessor.CleanTemporaryPlayerBuildData()
によってお掃除されちゃうからエディタ再生時には参照できなくないっすか…?
ザッと Addressables のデコンパイル結果読んでみたけど、 Library/com.unity.addressables/aa/
以下から読み込む的な魔法が書かれている様子も無かったんだが…。
catalog.hash
って何よ?ってのを調べてみた。
結論から言えば catalog.json
の MD5 採っただけのモノでした。
cat ServerData/Standalone/catalog_1.0.0.hash
31901441ea466dda98cfefd07e03bb20
md5 -r ServerData/Standalone/catalog_1.0.0.json | awk '{print $1}'
31901441ea466dda98cfefd07e03bb20
AddressableAssetSettings.asset
がビルドに含まれる仕組みが分からん…。
DefaultObject.asset
は EditorBuildSettings.asset
の ConfigObjects に設定されてるから、まぁ普通に含まれるんだろうけれども、そこからどういう黒魔術を使ったら AAS.asset が含まれるんすか…?
アプリのビルドが development かそうじゃないかによって Addressables が AssetBundle をダウンロードする際の URL を変える方法について頭を悩ませてきたんだが、普通に TransformInternalId なるテクニックで解決できそうなコトが判明した。
これから検証してみる。
行けた。すげーコードがシンプルになった。
MergeMode の意味について、毎回忘れるのでメモ
MergeMode | Value | Description | 説明 |
---|---|---|---|
None | 0 | Use to indicate that no merge should occur. The first set of results will be used. | 1つ目のキーに該当する要素を取得(2つ目以降のキーが意味を為さないので、何の意味が…?という気持ちになる… 🤔) |
UseFirst | 0 | Use to indicate that the merge should take the first set of results. | 〃 |
Union | 1 | Use to indicate that the merge should take the union of the results. | いずれかのキーにマッチする要素を全て取得 OR 的な感じ |
Intersection | 2 | Use to indicate that the merge should take the intersection of the results. | 全てのキーにマッチする要素のみを取得 AND 的な感じ |