ドキュメント

Unity Engine

Unity Engine

プレハブのインスタンス化の概要

Introductory context and common scenarios in which instantiating prefabs is useful.
読み終わるまでの所要時間 6 分最終更新 1ヶ月前

ランタイムにプレハブをインスタンス化するには、コードにそのプレハブへの参照が必要です。参照を作成するには、コードに
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); }}
このサンプルを使用するには、以下を行います。
  1. プロジェクトに新しい MonoBehaviour スクリプトを作成し、
    InstantiationExample
    という名前を付けます。
  2. 上記のスクリプト例をコピーして新しいスクリプトに貼り付け、保存します。
  3. メニューから GameObject > Create Empty を使用して、空のゲームオブジェクトを作成します。
  4. 新しい空のゲームオブジェクトにスクリプトをドラッグして、コンポーネントとしてゲームオブジェクトに追加します 。
  5. 任意のプレハブを作成 し、Project ウィンドウ からスクリプトコンポーネントの My Prefab フィールドにドラッグします。

Project ウィンドウからスクリプトコンポーネントの My Prefab フィールドにプレハブをドラッグ

再生モードを開始すると、シーンの (0, 0, 0) 位置にプレハブがインスタンス化されているのが確認できます。
別のプレハブを Inspector ウィンドウの My Prefab フィールドにドラッグすると、スクリプトを変更せずにインスタンス化するプレハブを変更できます。
この最初の例は非常に簡単なので、プレハブを自身でシーンに配置するのと比べ、特に利点はないように見えるかもしれません。ただし、コードを使用してプレハブをインスタンス化できれば、以下の例に示すように、ゲームやアプリケーションの実行中にゲームオブジェクトの複雑な設定を動的に作成する強力な機能が利用できます。

よくあるシナリオ

ランタイムのプレハブのインスタンス化は、以下の一般的なシナリオで役立ちます。
  • さまざまな位置でプレハブを複数回複製することによる、1 つのプレハブからなる構造 (例えば、グリッドや円形状など) の構築。
  • ランチャーからの砲弾プレハブの発射。砲弾プレハブは複雑な設定になることがあり、メッシュ、リジッドボディ、コライダー、オーディオソース、動的ライト、およびトレイル パーティクルシステム を持つ子ゲームオブジェクトが含まれる場合があります。
  • 車両、建物、またはキャラクター。例えば、バラバラのパーツに分解されるロボットなど。このシナリオのスクリプト例では、完全な状態の動くロボットのプレハブを削除し、壊れたロボットのプレハブに置き換えます。壊れたロボットのプレハブは、個別の壊れたパーツで構成されており、それぞれにリジッドボディとパーティクルシステムが設定されています。この方法を使うと、たった 1 行のコードで元のゲームオブジェクトを壊れたバージョンのプレハブに置き換えて、ロボットをバラバラに爆発させることができます。
以下のセクションでは、これらのシナリオの実装方法を説明します。

追加リソース