Androidでモデルロードが異常に遅いのはなぜだぜ
Unity2017.4.3でAndroidビルドしたらResources.Loadが異常に重い。確かに50MBとか大きいファイルではあるけども、1つのファイルロードに14秒とかいくらなんでも酷すぎる。ましてやGalaxy S9 という最新機種でだ。さらにiOSでは1秒ぐらいで済むのにだ。
というわけで調べてみた
Unity 2017 の新ビルドオプション「Compression Method」
どうやら2017からビルドオプションに「Compression Method」というのが増えて、デフォルトで「Default」というのになっている。これがロードの遅さの原因のようだ。
これを「LZ4」にすると超速になる。iOSと同様、1秒ぐらいのロードに短縮された。
わかってしまえばどうということないのだが、なぜデフォルトでLZ4オプションではないのかは不明だ。
「Compression Method」とは
該当のスクリプトリファレンスによると、このオプションで圧縮されるデータというのは以下のものを指す。
- Player settings
- シーンファイルや.assetファイル
- Resourcesの中身のファイル
- GIデータ
- ビルトイン済みのリソースファイル
ってこれ、AssetBundle以外の全てって言っていいんじゃないだろうか?
さらにドキュメントでは
Enabling CompressWithLz4 in Android might be a significant performance boost when loading data as LZ4 decompression is faster than the default Zip decompression.
とあり、意訳すると
特にAndroidでのCompressWithLz4は超絶ブーストがかかるぜ。デフォルトのZipよりも断然早いぜ
とのこと。(そこまでいうならなぜデフォルトをLZ4にしないw)
ということで、Androidでロードが遅い問題にぶつかったら真っ先にチェックしてみよう。