yotiky Tech Blog

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

Unity - Addressables (LocalLoad) で CRC チェックと Bundle Naming Mode の設定

検証環境

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

検証

LocalLoad を使用した時、CRCチェックと[Bundle Naming Mode]の設定を変更した場合の動作を検証する。

  1. 事前条件の状態でアセットをビルド後、アプリをビルドする
  2. アセット自体もしくはそれに加えてCRC/名付けの設定を変更後、アセットをビルドしなおす(アプリはビルドしない)
  3. アプリを起動する

パラメータの解説

UseAssetBundleCache
trueの場合、アセットバンドルのハッシュ値を使用して、バンドルをダウンロードする代わりにローカルキャッシュからロードできるかどうかを判断します。 (リモートアセットバンドルにのみ適用されます)

UseAssetBundleCrc
trueの場合、アセットバンドルのCRC(Cyclic Redundancy Check)を使用して整合性をチェックします。これは、ローカルバンドルとリモートバンドルの両方に使用できます。

UseAssetBundleCrcForCachedBundles
キャッシュ済みアセットバンドルのCRC(Cyclic Redundancy Check)を使用して整合性をチェックします。

引用元

LocalLoad

    • 設定
      • [Use Asset Bundle CRC] ON
      • [Use CRC for Cached Asset Bundles] ON
      • Append Hash to Filename
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235041p:plain
      • f:id:yotiky:20210629231242p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all_b9eb56df2be90d60b93085cc5cde771e.bundle
    • 設定
      • [Use Asset Bundle CRC] ON
      • [Use CRC for Cached Asset Bundles] ON
      • Append Hash to Filename -> Filename に変更
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235041p:plain
      • f:id:yotiky:20210629231149p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all.bundle
    • 設定
      • [Use Asset Bundle CRC] ON
      • [Use CRC for Cached Asset Bundles] ON
      • Filename
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235041p:plain
      • f:id:yotiky:20210629231149p:plain
    • 結果:CRC Mismatch. Provided 88e88e91, calculated 4c0a74c1 from data. Will not load AssetBundle 'StandaloneWindows64\local_assets_all.bundle'
    • 設定
      • [Use Asset Bundle CRC] ON
      • [Use CRC for Cached Asset Bundles] ON -> OFF に変更
      • Append Hash to Filename
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235106p:plain
      • f:id:yotiky:20210629231242p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all_b9eb56df2be90d60b93085cc5cde771e.bundle
    • 設定
      • [Use Asset Bundle CRC] ON -> OFF に変更
      • [Use CRC for Cached Asset Bundles] ON -> OFF に変更
      • Append Hash to Filename
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235130p:plain
      • f:id:yotiky:20210629231242p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all_609c480970c4dbec2de6800cb853ee0d.bundle
    • 設定
      • [Use Asset Bundle CRC] ON -> OFF に変更
      • [Use CRC for Cached Asset Bundles] ON -> OFF に変更
      • Append Hash to Filename -> Filename に変更
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235130p:plain
      • f:id:yotiky:20210629231149p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all.bundle
    • 設定
      • [Use Asset Bundle CRC] OFF
      • [Use CRC for Cached Asset Bundles] OFF
      • Append Hash to Filename -> Filename に変更
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235130p:plain
      • f:id:yotiky:20210629231149p:plain
    • 結果:Unable to open archive file: C:/git/LocalizationSample/Build/LocalizationSample_Data/StreamingAssets/aa/StandaloneWindows64/local_assets_all.bundle
    • 設定
      • [Use Asset Bundle CRC] ON -> OFF に変更
      • [Use CRC for Cached Asset Bundles] ON -> OFF に変更
      • Filename
      • アセット自体を更新
    • (変更後)
      • f:id:yotiky:20210628235130p:plain
      • f:id:yotiky:20210629231149p:plain
    • 結果:No Error

まとめ

  • LocalLoadのアセットであっても、Addressablesはサーバーに配置された最新のカタログをもとにチェックが行われる
  • LocalLoadの場合AssetBundleがアプリビルド時にバンドルされるため、ハッシュが名前に含まれているとAssetBundleが更新された時にハッシュが一致せずにUnable to open archive fileのエラーが出る
  • 名前にハッシュを含まない場合、CRCチェックを行うとAssetBundleは読み込めるが最新のカタログとCRCが一致しないとCRC Mismatchのエラーが出る
  • この場合、CRCチェックをしないようにするとアプリビルド時のAssetBundleを使って動作するようになる