Open11

Addressable Assets System について

monrymonry

AddressableAssetsSettings から Label を削除したら

と言われた。
ビルドすると、Entry についてて Settings に無いラベルは削除されるのか。

monrymonry

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 とかが反応せず…。

monrymonry

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 を定数値として引いた値を計算に用いるとヨサソウ。

monrymonry

Play Mode Script が Use Exising Build の時に LoadPath が LocalLoadPath な Group のアセットをエディタ実行時に読み込むのってどうやれば良いんだ?
Assets/StreamingAssets/aa/ 以下は AddressablesPlayerBuildProcessor.CleanTemporaryPlayerBuildData() によってお掃除されちゃうからエディタ再生時には参照できなくないっすか…?

ザッと Addressables のデコンパイル結果読んでみたけど、 Library/com.unity.addressables/aa/ 以下から読み込む的な魔法が書かれている様子も無かったんだが…。

monrymonry

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

monrymonry

AddressableAssetSettings.asset がビルドに含まれる仕組みが分からん…。
DefaultObject.assetEditorBuildSettings.asset の ConfigObjects に設定されてるから、まぁ普通に含まれるんだろうけれども、そこからどういう黒魔術を使ったら AAS.asset が含まれるんすか…?

monrymonry

アプリのビルドが development かそうじゃないかによって Addressables が AssetBundle をダウンロードする際の URL を変える方法について頭を悩ませてきたんだが、普通に TransformInternalId なるテクニックで解決できそうなコトが判明した。
これから検証してみる。

monrymonry

行けた。すげーコードがシンプルになった。

monrymonry

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 的な感じ
monrymonry

Addressable Group の m_MainAsset やら m_TargetAsset やらがチョイチョイ {fileID: 0} とかになって Diff る問題は、v1.17.17 で解決したっぽい。
Image from Gyazo

これを解決と呼んで良いのかは分からんけど、まぁ確かに Diff りはしなくなるでしょうね。