1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity6のInstantiateAsyncメモ

Last updated at Posted at 2024-11-10

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);
}

InstantiateTest_Instantiate.gif

止まる。わかりやすい。

2. InstantiateAsync

var instances = await Object.InstantiateAsync(prefab, count, default, default, Quaternion.identity, cts.Token);
instanceList.AddRange(instances);

引数のCountに5000を渡した。
InstantiateTest_InstantiateAsync.gif

ちょっと止まる。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
InstantiateTest_InstantiateAsync_for.gif
じわじわ読み込まれる。
CancellationTokenをつけておかないと大変なことになりそう。

まとめ

  • まとめて生成したい場合はInstantiateAsync
  • 順次読み込みで良い場合はLoopで回す

全部に使う必要はなく、読み込みが気にならないものはそのままInstantiateで問題なさそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?