unityでいってみよう!

unityがチョットワカル位の人のブログ

BuildAssetBundleOptionsを解説してみよう!

概要

AssetBundleのビルドオプションであるBuildAssetBundleOptionsに関しての解説です。 スクリプトリファレンス読めば判ることから何を言っているかわからんことまで解説しています。

尚、Unity2021.3時点での内容で記載しています。

AssetBundleのファイル名に影響を与えるオプション

AppendHashToAssetBundleName

AssetBundleのファイル名にHash値を追加します。

例)

sample -> sample_a074e0fd9e9a81367f7390e93a632095

このオプションの意図としては、既存のAssetBundleに変更を加えた場合に同じ名前の場合、なんらかの原因でキャッシュが更新されないというトラブルを回避する為に意図的に名前を変更し別ファイルとすることでその問題を回避する為に用意されていると思われます。

AssetBundleの中身に影響を与えるオプション

AssetBundleStripUnityVersion

このオプションを有効にすることで、AssetBundleからUnityのバージョンを取り除くことが出来ます。 これによりUnityのバージョンアップを行った際に、AssetBundleの中身がバージョン番号以外には差異が無い場合、このオプションを有効にすることで同一ファイルとみなすことが出来ます。 バージョン番号自体が何かに利用されていることも無さそうなので、積極的に有効にすべきオプションの一つです。

DisableWriteTypeTree

AssetBundleにTypeTreeの情報を含めなくなります。TypeTreeとはざっくりいうとAssetBundleに含まれるClassのTypeに関する情報です。 通常はAssetBundleに含まれるAssetがどの様なClassであるのかという情報が含まれているのですが、このオプションを有効にするとAssetのClassIDとシリアライズ情報のみになり、Unityや使用しているパッケージのバージョンが固定されていれば問題ありませんが、AssetBu構成要素の不一致が発生した時、正常に動作しないリスクは高まります。 このオプションを有効にすることでファイルサイズの削減が見込める為、リスクを背負う覚悟があるのであれば有効にしてみるのもありですが、全くお勧め出来ません。

AssetBundleのビルド条件に影響を与えるオプション

ForceRebuildAssetBundle

AseetBundleの構成内容変更の有無に関わらず、全てのAssetBundleをビルドの対象として処理します。 兎に角フルビルドをかけるという時に有効にします。

StrictMode

ビルド中にエラーが発生した場合、ビルドを停止します。 通常、停止しないエラーにはシェーダーコンパイル等があるようですが詳細は未確認です。 エラーを無視すると後で困った事になる為、有効にしておきましょう。

IgnoreTypeTreeChanges

AssetBundleのHash値に変化があった(AssetBundleの構成要素に変化があった)場合、そのAssetBundleをBuildの対象とします。 AssetBundleのHashの求め方はこれはこれでボリュームがあるのでここでは割愛しますが、AssetBundleに含まれるClassのTypeTree(Classを構成する情報)のHash値を比較するか否かを設定します。 このオプションを有効にすると、AssetBundleに含まれるClassにUnityのバージョン間で差異(例えば、変数の数が増減している等)があったとしてもAssetBundleはビルドの対象とはなりません。 「Classの内容に変更があってもUnityがきっと何とかしてくれる」と信じている人はオプションを有効にしてみると良いかもしれませんが、全くお勧めしません。

LoadAsset時に使用する引数に制限をかけるオプション

AssetBundleからAssetをロードするAPIであるAssetBundle.LoadAsset(string name)nameに使用出来る文字列を制御する為のオプションです。nameの部分には通常、フルパスのアッセトファイル名(例 Assets/Prefabs/Player.prefab)、アセットファイル名(例 Player)、拡張子付きアセットファイル名(例 Player.prefab)の何れかを使用することが出来ますが、制限を付ける事によりAssetBundleがロードされた時のランタイムメモリを削減する効果が期待できます。(AssetBundleのサイズ自体には変化が無いことに注意して下さい。) 1個あたりはたいしたことはないですがちりも積もればということで可能であれば有効にしておくべきでしょう。

DisableLoadAssetByFileName

アセットファイル名(例 Player)でのアクセスを無効化します。

DisableLoadAssetByFileNameWithExtension

拡張子付きアセットファイル名(例 Player.prefab)でのアクセスを無効化します。

その他

DryRunBuild

ビルドプロセスの内、AssetBundleManifestの生成迄を行います。 AssetBundleの依存関係やHash値などの確認のみ行いたい場合に便利です。

DeterministicAssetBundle

有効な場合、アセットバンドルに保管されているオブジェクト ID のハッシュを使用して、アセットバンドルを作成するとありますが、設定の如何に関わらずこのオプションは常に有効として扱われます。 よって意味の無いオプションとなります。