この記事でのバージョン
Unity 2017.4.6f1
はじめに
今回はResourcesをAssetBundleに置き換えると、
ビルドした実行ファイルのサイズがどの程度変わるのかという比較記事です!
なお、本記事に出てくる画像と音源のアセットは以下のものを使っています。
比較対象
比較に用いるのは画像ファイル(png)と音源ファイル(ogg)で、それぞれ約50MB分です。
また、ファイルの違いの他にもアセットの圧縮、非圧縮の比較も行いました。
ここで言う画像の圧縮、非圧縮はCompressionの事で、
None
テクスチャを圧縮しません。
High Quality
テクスチャを高品質の形式で圧縮します。メモリ使用は多くなります。
音源の圧縮、非圧縮はCompression Formatの事です。
PCM
品質は高くなりますが、ファイルサイズが大きくなります。非常に短い音響効果に最適です
Vorbis
圧縮ファイルは小さくなりますが PCM オーディオに比べると若干クオリティが落ちます。圧縮率は Quality スライダーの調整で可能です。この形式は中程度の長さの SE や音楽に適しています。
さらにAssetBundleはAssetBundleBrowserを使って、LZMAで圧縮しています。
無圧縮でかい、LZMA遅い、LZ4はその間
比較方法
Resourcesに直接アセットを追加、またはStreamingAssetsにAssetBundle追加した後、
ビルドし、実行ファイルのサイズの比較を行いました。
ただし、ビルド時には画像か音源のどちらか一方だけを使っている感じです。
なお、ビルド対象はMacのappファイルです。
比較結果
実際に比較した結果が以下の通りです。(単位はMB)
Resources | AssetBundle | |
---|---|---|
画像圧縮 | 202.8 | 89.6 |
画像非圧縮 | 240.4 | 95.9 |
音源圧縮 | 100.8 | 100.6 |
音源非圧縮 | 593 | 571.4 |
画像も音源も入ってない場合のファイルサイズが51.7MBだったので、それを差し引いた分で考えると
画像圧縮は約75%の容量削減、画像非圧縮は約77%の容量削減に繋がりました!
ただし、音源圧縮はほぼ0%、音源非圧縮でも約4%の容量削減にしか繋がらなかったので、
全てのアセットに対して容量削減に繋がるというわけではないようです。
おわりに
AssetBundleにする時にさらに圧縮しているので、多少容量は減る気がしてましたが、
まさかここまで減るというのは驚きでした。
ただし、AssetBundleを使うと実装や管理の手間も増えることや、
AssetBundleをロードする時間が増える点には注意が必要です。
特に今回使ったLZMAはロードがかなり遅いので、LZ4を使った方が良いかもしれません。
また、対象のプラットフォームやUnityのバージョン、プロジェクトやリソースの内容によっても
違いが出るので、そこら辺も考慮して検討する必要があります。
iOSやPCでは有益ですが、Androidではむしろしない方が良さそうです。
とは言え、公式で「Resourcesフォルダのベストプラクティスは使用しない事である」
とされているぐらいなので、
どんなプロジェクトでも基本的に「Resourcesは使わずにAssetBundleを使う」
という方針で問題ないかと思います。