画像表示用のスプライトのロード速度比較

概要

unityで画像を毎回ドラッグでインポートするのめんどくさい

なんかこう自動化するか

しかし、Resourcesからの読み込みとか、直接ファイルからの読み込みでロードの速度差あるんかな

環境

Windows 10
Unity 2021.2.19f1
Intel core i5-11400
NVIDIA GTX1060

手法

Editor上のPlayボタンにより計測を開始する
各ロード方法により同じ画像を10000枚だけ読み込ませる
読み込みを100周行い、その方法による平均ロード時間を出す

方法1. 毎回Resources.Loadする
方法2. 初回だけResources.Loadして、次からは最初に作ったやつを元にSprite.Createする
方法3. 初回だけResources.Loadして、次からは最初に作ったやつを元にInstantiateする
方法4. 毎回外部ファイルをFileStreamで読み込んでSprite.Createする

ソースコード
https://github.com/Meiling-N/LoadTest/blob/main/Assets/Script/Main.cs

計測結果

読み込む画像は正方形とする
表の値は平均ロード秒数
-は未計測、~は途中まで計ってやめた目視最低値

手法\1辺の長さ 32 128 512
1 0.0074 0.0073 0.0072
2 0.5152 4.0 ~ 57.5 ~
3 0.0937 0.0946 0.0948
4 2.0 ~ - -

参考: ロードにかかった最大秒数

手法\1辺の長さ 32 128 512
1 0.0120 0.0112 0.0127
2 - - -
3 0.1075 0.1188 0.1105
4 - - -

考察

Sprite.Createを毎回するのは論外
ロードにかかった最大秒数が計測された周は最初の方に集中しているっぽい
何かしら最適化が働いてるが、OS側だろうか
なんにせよ変にこちら側から小細工すると遅くなるっぽいので
使うならResources.Load一択になる




自動化案の方針

こうなると外部ファイルを参照せず、Resourcesフォルダに修正した画像を入れる, インポート時に自動で設定をするなどの自動化案が考えられるが
Resourcesフォルダを多用すると起動が遅くなるらしい

これによると
Assets, Resources and AssetBundles - Unity Learn
Resourcesは非推奨だが、このチュートリアル自体も非推奨になっている
なんでやねん

一応これを使えと言っている
Addressables | Addressables | 1.21.2
サンプル
GitHub - Unity-Technologies/Addressables-Sample: Demo project using Addressables package
なおUnityのマニュアルではAssetBundleかAddressablesを使ってみたら?みたいな位置づけ
Loading Resources at Runtime - Unity マニュアル
どっちを使えというのかね

なんにせよ、試作じゃないならResourcesから脱却した方がいいらしい
そうなると、どう自動化するかも変わってくるので、こいつらがなんなのかの確認がいる

まぁ自分の規模じゃ気にする必要ないと思うけどね!




nsan.hatenablog.com