Prefab は,コンポーネントを追加し,これらのプロパティを適切な値に設定してシーン内の GameObject を構築するのに便利です。面倒ですが,シーンで数回再利用するNPCや小道具,風景の一部のようなオブジェクト作成することができます。単純にオブジェクトをコピーすると確かに重複して生成されますが,それらはすべて独立して編集可能になります。一般的に,特定のオブジェクトのすべてのインスタンスが同じ性質を持つようにするので, シーンで一つのオブジェクトを編集するとき,すべてのコピーに繰り返し同じ編集作業をすることはしたくないでしょう。
幸いなことに,Unityは,GameObjectオブジェクトのコンポーネントとプロパティ全てを格納する Prefab アセットタイプを持っています。プレハブはテンプレートとして使われ,シーン内に新しいオブジェクトインスタンスを作成することができます。プレハブアセットに加えられたすべての編集内容はすぐに生成された全てのインスタンスに反映されますが,各インスタンス別にコンポーネントを override したり,設定できます。
注意: シーンにアセットファイル(例えば,メッシュ)をドラッグすると,新しいオブジェクトインスタンスを作成し,元のアセットが変更されたときにその全てのインスタンスが変更されます。その動作は表面的に似ていますが,アセットはプレハブではないので,それにコンポーネントを追加したり,後述する他のプレハブの特徴を利用することができなくなります。
を選択し,表示される”空”のプレハブアセットのシーンからオブジェクトをドラッグして,プレハブを作成することができます。プロジェクトビューからシーンビューにプレハブアセットをドラッグした後,プレハブのインスタンスを作成するだけです。プレハブのインスタンスとして作成されたオブジェクトは青色のテキストで,ヒエラルキービューで表示されます(通常のオブジェクトは黒のテキストで表示されている)。
上記で述べたプレハブアセット自身への変更はすべてのインスタンスに反映されますが,別々に個々のインスタンスを変更することができます。いくつか似たようなNPCを作成する際,より現実的にみえるようにするためのバリエーションを導入したいときに便利です。プロパティがオーバーライドされたときにそれを明確にするために,その名前のラベルが太字でインスペクタに示されます。(完全に新しいコンポーネントがプレハブインスタンスに追加されると, すべて のプロパティが太字で表示されます。)
スクリプトからプレハブをインスタンス化する 方法については Instantiating Prefabs を参照下さい。
インスタンスからのプレハブの編集
インスペクタ上に表示されるプレハブインスタンスには,通常のオブジェクトのために存在しない3つのボタンがあります, Select ・ Revert ・ Apply です。
Select ボタンは,生成されたインスタンスからプレハブアセットを選択します。これはメインのプレハブを編集し,それによってそのすべてのインスタンスを変更できことを示します。 Apply ボタンを使用して,インスタンスから上書きした値を元のプレハブに保存することができます(修正された位置と回転値は明白な理由で除外されています)。任意の単一のインスタンスを経由してすべてのインスタンスを有効に編集することができ,全体的な変更を加えることができる非常に迅速かつ便利な方法です。プロパティのオーバーライドを試した後,デフォルト値の方がいいなら,そのプレハブでインスタンスを再調整するために Revert ボタンを使用できます。