プレファブから多量のゲームオブジェクトを作成(Addressable)

概要

この資料では、UnityのAddressablesシステムを使用して、大量のPrefabインスタンスを効率的に生成する方法を解説します。特に、生成位置をランダム化することで、視覚的に確認しやすいサンプルコードを示します。

前提


コードサンプル

以下は、ランダムな位置に指定した数のPrefabインスタンスを生成するC#コードの例です。

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class PrefabSample : MonoBehaviour
{
    [SerializeField]
    private AssetReference prefab; // AddressableなPrefabを参照

    [SerializeField]
    private int instanceCount = 10; // 作成するインスタンスの数

    [SerializeField]
    private Vector3 spawnArea = new Vector3(10, 0, 10); // 生成するエリアの範囲

    void Start()
    {
        for (int i = 0; i < instanceCount; i++)
        {
            // ランダムな位置を計算
            Vector3 randomPosition = new Vector3(
                Random.Range(-spawnArea.x / 2, spawnArea.x / 2),
                Random.Range(-spawnArea.y / 2, spawnArea.y / 2),
                Random.Range(-spawnArea.z / 2, spawnArea.z / 2)
            );

            // Addressablesを使用してPrefabを生成
            Addressables.InstantiateAsync(prefab, randomPosition, Quaternion.identity).Completed += OnPrefabInstantiated;
        }
    }

    // インスタンス生成後のコールバック
    private void OnPrefabInstantiated(AsyncOperationHandle<GameObject> obj)
    {
        if (obj.Status == AsyncOperationStatus.Succeeded)
        {
            Debug.Log($"インスタンスを作成しました: {obj.Result.name} (位置: {obj.Result.transform.position})");
        }
        else
        {
            Debug.LogError("Prefabの生成に失敗しました。");
        }
    }
}

主なポイント

1. Addressablesを使用したPrefabの生成

  • AssetReference型を使用してAddressableなPrefabを指定します。
  • Addressables.InstantiateAsyncメソッドを使用して非同期でインスタンスを生成します。

2. ランダムな生成位置

  • Random.Rangeを使用して、指定した範囲内でランダムな生成位置を計算します。
  • spawnAreaフィールドで生成範囲をカスタマイズ可能です。

3. インスタンス生成後の処理

  • 生成が完了した際にOnPrefabInstantiatedメソッドが呼び出されます。
  • Debug.Logを使用して生成されたインスタンスの名前と位置をコンソールに出力します。
  • エラー時にはDebug.LogErrorでエラーメッセージを出力します。

実行結果

このコードを使用すると、指定した数のPrefabがランダムな位置に生成されます。生成時のメッセージがUnityのコンソールに日本語で表示され、デバッグが容易になります。


応用例

  • ゲームオブジェクトの配置:
  • 敵キャラクターやアイテムのランダム配置に利用できます。
  • パフォーマンステスト:
  • Addressablesを利用した大量インスタンス生成のパフォーマンス確認。

注意事項

  1. Addressablesのセットアップ:
    • UnityプロジェクトでAddressablesを設定し、使用するPrefabをAddressableとしてマークする必要があります。
  2. インスタンス生成数の制限:
    • 過剰な数のインスタンスを生成するとパフォーマンスに影響を与える可能性があります。

以上が大量のPrefabインスタンスを生成するための技術資料です。必要に応じて、生成数や範囲を調整しながら使用してください。

Unity

Posted by hidepon