プレファブから多量のゲームオブジェクトを作成(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を利用した大量インスタンス生成のパフォーマンス確認。
注意事項
- Addressablesのセットアップ:
- UnityプロジェクトでAddressablesを設定し、使用するPrefabをAddressableとしてマークする必要があります。
- インスタンス生成数の制限:
- 過剰な数のインスタンスを生成するとパフォーマンスに影響を与える可能性があります。
以上が大量のPrefabインスタンスを生成するための技術資料です。必要に応じて、生成数や範囲を調整しながら使用してください。
ディスカッション
コメント一覧
まだ、コメントがありません