Instantiateと比較したのでメモ
使い方
UnityEngine.Object.InstantiateAsync(Prefab, Count, ...);
今までと違うのはCountとSpanが引数にあること。
Spanは高速なArrayと思っていいみたい。
比較
ParticleSystemのPrefabを用意。
5000個生成したときの挙動を比較した。
1. Instantiate
for (int i = 0; i < count; i++)
{
var instance = Instantiate(prefab);
instanceList.Add(instance);
}
止まる。わかりやすい。
2. InstantiateAsync
var instances = await Object.InstantiateAsync(prefab, count, default, default, Quaternion.identity, cts.Token);
instanceList.AddRange(instances);
ちょっと止まる。Instantiateより止まらない。
※CancellationTokenを渡すためにQuaternion.Identityをいれたので向き異なります。
2. InstantiateAsync ForLoop
for (int i = 0; i < count; i++)
{
var instances = await Object.InstantiateAsync(prefab, 1, default, default, Quaternion.identity, cts.Token);
instanceList.AddRange(instances);
}
ForLoopで5000回InstantiateAsync
じわじわ読み込まれる。
CancellationTokenをつけておかないと大変なことになりそう。
まとめ
- まとめて生成したい場合はInstantiateAsync
- 順次読み込みで良い場合はLoopで回す
全部に使う必要はなく、読み込みが気にならないものはそのままInstantiateで問題なさそうです。