テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】ゲームに最初から含めるアセット群を圧縮するオプション

Unity 5.6から、ビルドしたゲームに含めるアセット群を圧縮するオプションが追加されました。

この圧縮をONにすることで「アプリ起動時間の短縮」「インストール後にサイズが膨れ上がるのを防ぐ(iOS/Standalone)」効果が期待出来ます。

ビルドしたゲームに含めるアセット

Unityは、ゲームに含めたシーンやResourcesから参照しているアセット群は、ゲームビルド時にゲームに含めます(参照されていなければ含まれません)

含まれるアセットは基本的にそのまま保持されます。たとえば、RGBA32のような非圧縮画像の場合、全く圧縮されず非常に大きなサイズとなってアプリに反映されます。

http://cdn-ak.f.st-hatena.com/images/fotolife/t/tsubaki_t1/20160505/20160505230835.jpg

tsubakit1.hateblo.jp

アセット群を圧縮するオプション

Playerのアセットを圧縮するには、BuildPipelineのBuildPlayerにて、BuildOptions.CompressWithLz4を有効にするだけです。

5.6では、BuildPipeline.BuildPlayerのコードを記述する必要があります。

gist.github.com

2017.2からBuild Settingsで設定できるようになったみたいです。

f:id:tsubaki_t1:20170926094742j:plain

起動時間が早くなる

 これの良いと思う所は、単純に起動が早くなる事です。

 実際に比較すると、圧縮前は1.44秒かかっていた起動が、圧縮後は0.54秒で完了し起動しています。

 正確には、アプリに含まれる巨大なアセットを遅いIOからロードするより、CPUが早いので圧縮したアセットから取り出して解凍した方が早くなった…という感じな気がします。
もしかしたらIOアクセスが早くなるらしい最新のiOSでは、余り変わらないかもしれません。

 

まぁ、ソレ以外にも5.6で色々とロードパフォーマンス改善してる気がしなくもないです…IL2CPPにするとMonoより起動が早くなるとかも含めて。

 

インストール後のサイズが減る。apkやipa時は余り変わらず

さてandroidiOSのアプリサイズとして気になるのは、リリース時のアプリサイズだと思いますが、こちらは残念ながらほぼ変わらないです。

 

というのも、ipaやapkは既にzip形式で圧縮されており、いまさら再圧縮した所で対して変わらないどころか、場合によっては増えます。

 

ただし、アプリをインストール後は話は別です。Androidは対して変わらないのですが、iOSの場合インストール後にファイルを解凍します。
そのためiOSはアプリインストール後にファイルサイズが跳ね上がる訳ですが、圧縮オプションではその辺りをかなり緩和してくれます。

 

感想

Resourcesを使わない理由がまた一つ減った感

 

関連

AssetBundleに格納してみた的な

tsubakit1.hateblo.j