コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Object.InstantiateAsync で複数のオブジェクトを同時に Instantiate する

使用例 1

using Cysharp.Threading.Tasks;
using UnityEngine;

public class Example : MonoBehaviour
{
    [SerializeField] private GameObject m_original;

    private async UniTask Start()
    {
        var operation = InstantiateAsync( m_original, 10 ); // 10 個生成
        await operation;
        foreach ( var go in operation.Result )
        {
            Debug.Log( go, go );
        }
    }
}

使用例 2

using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;

public class Example : MonoBehaviour
{
    [SerializeField] private GameObject m_original;

    private async UniTask Start()
    {
        const int count = 10;

        // 位置や回転を指定することもできる
        var positions = Enumerable.Range( 0, count ).Select( _ => Random.insideUnitSphere ).ToArray();
        var rotations = Enumerable.Range( 0, count ).Select( _ => Random.rotation ).ToArray();
        var operation = InstantiateAsync( m_original, count, positions, rotations );

        await operation;

        foreach ( var go in operation.Result )
        {
            Debug.Log( go, go );
        }
    }
}