Unity 5.6から、ビルドしたゲームに含めるアセット群を圧縮するオプションが追加されました。
この圧縮をONにすることで「アプリ起動時間の短縮」や「インストール後にサイズが膨れ上がるのを防ぐ(iOS/Standalone)」効果が期待出来ます。
ビルドしたゲームに含めるアセット
Unityは、ゲームに含めたシーンやResourcesから参照しているアセット群は、ゲームビルド時にゲームに含めます(参照されていなければ含まれません)
含まれるアセットは基本的にそのまま保持されます。たとえば、RGBA32のような非圧縮画像の場合、全く圧縮されず非常に大きなサイズとなってアプリに反映されます。
アセット群を圧縮するオプション
Playerのアセットを圧縮するには、BuildPipelineのBuildPlayerにて、BuildOptions.CompressWithLz4を有効にするだけです。
5.6では、BuildPipeline.BuildPlayerのコードを記述する必要があります。
2017.2からBuild Settingsで設定できるようになったみたいです。
起動時間が早くなる
これの良いと思う所は、単純に起動が早くなる事です。
実際に比較すると、圧縮前は1.44秒かかっていた起動が、圧縮後は0.54秒で完了し起動しています。
先日紹介するの忘れてたけど、Unity 5.6からPlayerに含めるリソースを圧縮するオプションが追加されてた。(iOSは)アプリインストール後のサイズが減ったり(Androidは)起動時間が短くなったりアセットのロードが早くなったりするっぽい pic.twitter.com/LJjSF1atrj
— 椿 (@tsubaki_t1) 2017年3月22日
正確には、アプリに含まれる巨大なアセットを遅いIOからロードするより、CPUが早いので圧縮したアセットから取り出して解凍した方が早くなった…という感じな気がします。
もしかしたらIOアクセスが早くなるらしい最新のiOSでは、余り変わらないかもしれません。
まぁ、ソレ以外にも5.6で色々とロードパフォーマンス改善してる気がしなくもないです…IL2CPPにするとMonoより起動が早くなるとかも含めて。
インストール後のサイズが減る。apkやipa時は余り変わらず
さてandroidやiOSのアプリサイズとして気になるのは、リリース時のアプリサイズだと思いますが、こちらは残念ながらほぼ変わらないです。
というのも、ipaやapkは既にzip形式で圧縮されており、いまさら再圧縮した所で対して変わらないどころか、場合によっては増えます。
apkを解凍すると、圧縮版と従来版ではサイズは結構違う。ただ、ipaやapkとして提出するタイミングでは大して変わらない。むしろ増えてるかも pic.twitter.com/kkfudJKfu4
— 椿 (@tsubaki_t1) 2017年3月22日
ただし、アプリをインストール後は話は別です。Androidは対して変わらないのですが、iOSの場合インストール後にファイルを解凍します。
そのためiOSはアプリインストール後にファイルサイズが跳ね上がる訳ですが、圧縮オプションではその辺りをかなり緩和してくれます。
感想
Resourcesを使わない理由がまた一つ減った感
関連
AssetBundleに格納してみた的な