LoginSignup
22
20

More than 1 year has passed since last update.

Addressable Asset でリモートコンテンツを正しく更新する方法

Last updated at Posted at 2022-03-07

addressableでリモートコンテンツのアップデートをどのように行うかについてのざっとしたメモ書き。

ともかく、日本のサイトにはAddressableをどのようにして導入するかについての記事はやたらとあるのだけど リモートコンテンツをどのように更新するか についての記事がさっぱりなかったので、メモ書きとして残しておくことにした。

記事の読者の対象としては Addressableは導入して、ちゃんと読めるようになった(これはめっちゃ簡単だと思う)が、なんだかサーバーに置かれるリモートコンテンツのアップデート方法が良く分からないぞ? という人である。

最大のポイントは Addressable_contents_state.bin の使い方。
知る限りでは日本語の情報は全くない。
unityの英語のマニュアルがあるだけで、しかもこれもメッチャいい加減なのだけど、これを読まないとわからない。ついでに書くと、このマニュアルは熟読した方がいい。

基本Addressableのセットアップは出来ている。サーバーにデータも置いた。サーバーから正しく読めている。
ところで コンテンツの更新 をしたいとき、どうするの? というときに、上のマニュアルを読めばいいのだけど、ともかくわかりにくいので以下にザックリとしたプロセスを書いておく。

  1. 一番最初にアドレサブルのコンテンツデータを作るとき、"New Build"からアドレサブルビルドを生成する(これはローカルでやる必要がある)
  2. 出来上がった Addressable_contents_state.bin を例えば "ver_2022_03_09_master.bin"というような確実に100%、何者か分かる名前をつけて、大事に保存する。これ、 スーパーウルトラ大事
  3. リソースアップデートが出来て、新しいリソースをサーバーに置かなければいけないとき、Toolsの"Check for Content Update Restrictions"を実行して、問題を解決しておく。めんどいのでここは説明しない。
  4. Buildから "Update A Previous Build" をすると、どこにContents.binがあるんだよと聞かれるので、大事に保存したstate.binを指定する。
  5. 差分情報を持ったカタログとリモートコンテンツが出来上がるので、これをサーバーにアップロードすればよい。

これで実行環境側ではカタログをアップデートした後、 アップデートされていないコンテンツは読み込まずスキップしてくれる ようになる。
わかってしまえば、これだけなのだけど、ともかく日本の情報ではわからないのでメモ書きとして残しておく。

以下は、英語のマニュアルに書いていない恐怖の情報

  • Addressable_contents_state.binはターゲット毎、クライアントごとの生成が必須
    どこにも書いていないうえに、素直にマニュアルを読むと Addressable_contents_state.bin にはコードに依存するようなデータは一切含まれていないように思えるのだけど、実は違う。
    このファイルには どこ(URL)から読むのかの情報が含まれている 。そして、update buildをするときは、それが一致していないと、エラーでビルド出来ない。
    要はremote_pathが一致しなければならない。
    だから例えば"Master"と"Staging"と"Develop"でそれぞれサーバーが違ってremote_pathが設定されている時(普通はそうだ)、別にcontent_state.binを生成しなければならない。これを知らないと、基礎になるバージョンに戻って慌てて全部のcontent.binを生成するハメになる(やった)。
    また、これはプラットフォームごとに分かれているので、プラットフォームごとにビルド必須。

  • いつまで同じカタログを使えるのか?
    -> 基本はずっと使えるらしい。

  • カタログの内容が変動してきて、最初から読ませたい場合もあるときはどうするか?
    →catalogのバージョンを変えて、new buildする。
    すると新しいカタログなので、今までのキャッシングされたデータは全て破棄されることになる。

  • うっかり同じ名前でnew buildをしたらどうなるのか?
    catalogのバージョンは変わっていないのにnew build = 差分情報ではないので、全部読もうとして、しかもイロイロ同じなもので衝突し、謎のキャッシュ状態になって、いろいろなものがブチ壊れる。やったら大変だよ!
    どうしてunityのデフォルトの設定が日付使ってるのかの理由がコレだと理解するまでひどい目にあった。

  • "Unity Cloud Build"ではどうするの?
    ちゃんとcontent.binを指定できる。ただし、unity cloud buildのマニュアルには全く書いていないし、どうなるのかもわからないのだけど、 別のcontent.binを指定してビルドしてもビルドは通ってしまう。
    中身をチェックしたら、とても怪しかったのでやらない方がいい

    まさに今日、新しいターゲットのセットアップで間違ってやってしまったので、情報更新。
    ちゃんとビルドは通らない。でもエラーが出るまでは全然わからない。事前に調べてほしい。

と、こんな感じ。

はっきり書いて、unityさん、addressableに移行したいなら、マニュアルをもっと充実させてください。
ともかくマニュアルの出来に問題があり、マニュアルに書いていない やってはいけないコト がてんこ盛りで、ワナを踏みまくることになる(なったし、今でも踏んでいる)。

22
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
20