概要
unityで画像を毎回ドラッグでインポートするのめんどくさい
↓
なんかこう自動化するか
↓
しかし、Resourcesからの読み込みとか、直接ファイルからの読み込みでロードの速度差あるんかな
手法
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から脱却した方がいいらしい
そうなると、どう自動化するかも変わってくるので、こいつらがなんなのかの確認がいる
まぁ自分の規模じゃ気にする必要ないと思うけどね!