yotiky Tech Blog

とあるエンジニアの備忘録

Unity - Localization の Addressables の挙動

検証環境

  • Unity 2019.4.25f1
  • Addressables 1.18.9
  • Localization 1.0.0-pre.9

注意点

Addressables と Localization のバージョンの相性が悪いとアプリがフリーズすることがある。 Addressables 1.18.4 を使っていた時に、Localization 関連の Addressable を Remote に設定すると、Unity Editor も、Windows アプリも100%フリーズする現象に悩まされた。

検証1 Asset ビルド時の挙動

  1. アプリを起動してローカライズされた文字が表示されることを確認する
  2. ローカライズの文字列を編集してAssetをビルドしなおす(アプリはビルドしない)
  3. アプリを再起動する
  4. ローカライズされた文字が更新されることを確認する

LocalLoad

  • [Use CRC for Cached Asset Bundles] ON / [Use Asset Bundle CRC] ON
    • f:id:yotiky:20210628235041p:plain
    • アプリ再起動後 : CRC Mismatch. 発生
  • [Use CRC for Cached Asset Bundles] OFF / [Use Asset Bundle CRC] ON
    • f:id:yotiky:20210628235106p:plain
    • アプリ再起動後 : CRC Mismatch. 発生
  • [Use CRC for Cached Asset Bundles] OFF / [Use Asset Bundle CRC] OFF
    • f:id:yotiky:20210628235130p:plain
    • アプリ再起動後 : エラーは出ないが、アプリビルド時(更新前)のテキストが表示される

RemoteLoad

  • [Use CRC for Cached Asset Bundles] ON / [Use Asset Bundle CRC] ON
    • f:id:yotiky:20210628235041p:plain
    • アプリ再起動後 : 更新後のテキストが表示される

検証2 RemoteLoad での動的更新

検証1ではアプリを再起動することでローカライズの更新を確認した。
ここでは、アプリ起動中に動的に Addressables の更新を行う方法を検証する。

f:id:yotiky:20210628235441p:plain

f:id:yotiky:20210628235323p:plain

アプリ起動中に Addressables の更新を行う場合、メモリに読み込んだアセットを開放しないと読み込みできずに失敗する。
通常だと Release や ReleaseInstance を使って読み込んだアセットを開放することになるが、Localization の場合開放する手段が見つからない。
Localization で動的更新するための機能はまだ備わっていない様子。

唯一成功したケースとしては、Addressalbes の Unique Bundle ID という機能で動的に更新することができた。ただし機能自体にデメリットもあるようなので使うかどうかは要検討。(参考リンク参照)

f:id:yotiky:20210628235410p:plain

参考リンク