春から鉄道員、それでもゲーム開発が好き
そんな人間のどうでもいい日記。

AAS(Addressables Asset System)で更新作業

 

まず初めに‥‥

・AB(Asset Bundle)すら使ったことない奴がAAS使いこなせるのかしら

 

 本題…

・AASを使ってアセットの更新をしたいんだが、挙動が分からない。

現在0.6.6のAASが公開されていますが、あれこれ有力な情報はフォーラム程度なので何か不明な挙動しても解決に時間を要するんですよね…。

 

今回いくつか実験をしてみて気になったところを書いてみます。

 

・今回やったこと

更新したデータ(シーンのオブジェクト削除)を正常にDLしてくれるのか検証

f:id:Oinary:20190309015735p:plain

f:id:Oinary:20190309015739p:plain

1.更新前の画像 2.更新後の画像

 

・手順

1.ビルドデータに含まれるScene(以降Aと呼ぶ)を作成する。これはSceneをロードするためのものなので、今回の実験には大きな関係はない。

2.AASに登録&サーバーに乗っける為の、Scene(以降Bと呼ぶ)を作成する。

3.Addressables.DownloadDependenciesで事前に全アセットをダウンロードし、AからBをロードするスクリプトを作成。

4.ビルドする。

5.Bのコンテンツ修正前と修正後で1回ずつ起動し、切り替わっていることを確認する。

※ただしローカルサーバを用いる。

 

・結果

上記の写真通り更新されました。

ここまでは理想通りの結果。だがしかし、追加の実験をして分かった事が。

 

・追加

この後ローカルサーバを遮断(いわゆるオフライン状態)にし、再度起動してみる。

予想であれば、先ほどの実験で更新データをダウンロード済みなので、変わらず更新後の状態が表示される。

f:id:Oinary:20190309015735p:plain

追加実験の結果

か、変わってねぇ...。元に戻ってる…。

前の段階で更新データをDLしたにも関わらず、オフラインにした途端元に戻ってる…。

 

・なぜか

AASの仕組みの一部として、クライアント(ユーザーPC)にあるコンテンツカタログを用いて、アセットを管理しています。カタログに書いてあるアセットを持っていない場合、カタログに示されたアドレスでアセットをDLし設定によってはキャッシュにため込みます。

サーバーにあるカタログは常に最新を示しているので、クライアント側はサーバーのカタログと同期させ常に新しいアドレスを持ちます。

クライアント側の更新されたカタログはC:\UsersUSERNAMEi\AppData\LocalLow\CompanyNameE\PROJECTNAME\com.unity.addressablesに格納。がこれはオンライン時の話なんです。

 

実はオフラインの時、別のカタログを読み込んでるっぽい。

ビルド場所\Hoge_Data\StreamingAssetsにsettings.jsonが居るかと。

その中身、"m_Keys": [ "AddressablesMainContentCatalog" ]

名前の通りメインのカタログですが。その下のアドレスを見ると…。

{UnityEngine.AddressableAssets.Addressables.RuntimePath}/catalog.json

これは今見ているsettings.jsonと同じフォルダにあるcatalog.jsonを示しています。

そう、これはビルド時に参照していたカタログ…。オフラインの時や、初回起動時はココを参照しているらしい。んで、更新なんてされるはずもなく…この結果。

 

・んじゃ解決方法は?

予測だが更新カタログの保存場所を変えるのかな…?

見つかったら追記します。すっごい眠い(午前3時08分)

(けものフレンズ3D制作のメンバーが欲しいです)
COPYRIGHT🄬 Oinary ALL RIGHTS RESERVED