ランタイムにプレハブをインスタンス化するには、コードにそのプレハブへの参照が必要です。参照を作成するには、コードに GameObject 型のパブリックフィールドを作成し、Inspector でそのフィールドにプレハブを割り当てます。
以下のスクリプトの例では、パブリック変数 myPrefab を 1 つ使用してプレハブを参照します。Start メソッドでそのプレハブのインスタンスを作成します。
using UnityEngine;
public class InstantiationExample : MonoBehaviour
{
// Reference to the Prefab. Drag a Prefab into this field in the Inspector.
public GameObject myPrefab;
// This script will simply instantiate the Prefab when the game starts.
void Start()
{
// Instantiate at position (0, 0, 0) and zero rotation.
Instantiate(myPrefab, new Vector3(0, 0, 0), Quaternion.identity);
}
}
このサンプルを使用するには、以下を行います。
InstantiationExample という名前を付けます。
再生モードを開始すると、シーンの (0, 0, 0) 位置にプレハブがインスタンス化されているのが確認できます。
別のプレハブを Inspector ウィンドウの My Prefab フィールドにドラッグすると、スクリプトを変更せずにインスタンス化するプレハブを変更できます。
この最初の例は非常に簡単なので、プレハブを自身でシーンに配置するのと比べ、特に利点はないように見えるかもしれません。ただし、コードを使用してプレハブをインスタンス化できれば、以下の例に示すように、ゲームやアプリケーションの実行中にゲームオブジェクトの複雑な設定を動的に作成する強力な機能が利用できます。
ランタイムのプレハブのインスタンス化は、以下の一般的なシナリオで役立ちます。
さまざまな位置でプレハブを複数回複製することによる、1 つのプレハブからなる構造 (例えば、グリッドや円形状など) の構築。
ランチャーからの砲弾プレハブの発射。砲弾プレハブは複雑な設定になることがあり、メッシュ、リジッドボディ、コライダー、オーディオソース、動的ライト、およびトレイル パーティクルシステム を持つ子ゲームオブジェクトが含まれる場合があります。
車両、建物、またはキャラクター。例えば、バラバラのパーツに分解されるロボットなど。このシナリオのスクリプト例では、完全な状態の動くロボットのプレハブを削除し、壊れたロボットのプレハブに置き換えます。壊れたロボットのプレハブは、個別の壊れたパーツで構成されており、それぞれにリジッドボディとパーティクルシステムが設定されています。この方法を使うと、たった 1 行のコードで元のゲームオブジェクトを壊れたバージョンのプレハブに置き換えて、ロボットをバラバラに爆発させることができます。
以下のセクションでは、これらのシナリオの実装方法を説明します。