CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Unity】プレハブ化とは?オブジェクトを簡単に複製しよう

Unityでゲームを作る際、ゲームオブジェクトを使いまわしたいことがあるかと思います。
例えば敵キャラクターは色んな箇所に配置しますよね。
一つ一つ複製して配置することもできますが、後から敵キャラクターの見た目や動きを変えたくなったときなどに大変な作業になります。
そんなときのために、ゲームオブジェクトをプレハブ化して複製しておくと後からでも簡単に変更できるんです。
そこで本記事ではゲームオブジェクトをプレハブ化して複製する方法について解説します!
プレハブ化とは
プレハブ(Prefab)とは、ゲームオブジェクトを複製できる仕組みのことです。
そしてプレハブ化とは、ゲームオブジェクトからそのプレハブを作成することを意味します。
ゲームオブジェクトをプレハブ化しておけば、下のようにプレハブをドラッグアンドドロップするだけで簡単にオブジェクトを複製できます。
ゲームオブジェクトに一括で変更を加えたくなった時は、プレハブを編集することで全てのオブジェクトに変更を適用できます。

プレハブ化の設定方法
プレハブ化の設定方法について、下のような手順で解説していきます。
- オブジェクトをプレハブ化する
- プレハブを利用する
- プレハブ化解除のやり方
- プレハブ化ができない時
それでは、実際にプレハブを作っていきましょう。
オブジェクトをプレハブ化する
まずは、プレハブ化したいオブジェクトを作成しましょう。
Gameobject→3D Object→CubeでCubeを作成します。

このようにシーンにCubeが配置されます。

なお、見やすいようにマテリアルの色を変更しています。
マテリアルの変更方法については下の記事で詳しくまとめております。

それでは作成したCubeをプレハブ化していきましょう。
プレハブ化の手順は非常に簡単で、ヒエラルキー内でゲームオブジェクトを選択し、
アセットフォルダ内にドラッグアンドドロップするだけです。

プレハブが作れたら、元のゲームオブジェクトは消してしまっても大丈夫です。
ゲームオブジェクトを選択しキーボードのdeleteキーで削除できます。

作成したプレハブは自由に名前を変更することができます。
実際に使う時はプレハブの数が増えてくるので、名前をつけておくと後から分かりやすくて便利です。
下のようにプレハブを右クリック→Renameで名前が変更できます。

ここではRedCubeという名前に変更しておきます。
これでプレハブが作成でき、使う準備ができました。
ここからはプレハブを利用してオブジェクトを複製していきます。

プレハブを利用する
プレハブを使ってゲームオブジェクトを複数作成してみましょう。
手順は簡単で、下のようにプレハブをシーン内の好きな位置にドラッグアンドドロップ
またはヒエラルキーにドラッグアンドドロップでも配置することができます。
複製されたゲームオブジェクトは名前が青色で表示されているのが確認できます。
この青色は、プレハブを使って複製されたオブジェクト(インスタンス)であることを示しています。

プレハブを編集する
作成したプレハブの内容を変更したい場合もあるかと思います。
ここでは、プレハブモードで編集する方法を紹介します。
アセットフォルダにあるプレハブをダブルクリックします。

すると、このようにプレハブを直接編集できる画面が開きます。
ここで変更した内容は、このプレハブを使ってシーンに配置したゲームオブジェクト全てに適用されます。

試しにプレハブのマテリアルを青色のマテリアルに変更してみます。
下のようにプレハブにマテリアルを適用しゲーム画面に戻ると、ゲームオブジェクト全てに変更が適用されているのが分かります。

今回は全てのゲームオブジェクトに変更を適用させましたが、一部にだけは変更を適用させたくない場合もあるかと思います。
そんなとき、ゲームオブジェクトとプレハブとのリンクを解除することもできます。
次はそんなプレハブ化解除の方法を解説します。
プレハブ化解除のやり方
プレハブ化を解除するには、解除したいゲームオブジェクトを右クリック→Prefab→Unpackをクリック
これでゲームオブジェクトとプレハブとのリンクが解除されます。

プレハブ化解除されたゲームオブジェクトは、プレハブの複製物であることを示す青色から、白色に戻っているのが確認できます。

先ほどと同じようにプレハブモードでプレハブを編集しても、プレハブ化解除されたゲームオブジェクトには変更が適用されません。
下のようにプレハブに青色のマテリアルを適用してみても、プレハブ化解除されたオブジェクトの色は変わらないのが確認できます。

プレハブ化ができない時
プレハブ化しようとゲームオブジェクトをドラッグアンドドロップしても、
下のようにエラーが出てプレハブ化できないときがあります。

プレハブ化しようとしているゲームオブジェクトのインスペクター内に、Missingとなっているスクリプトがあるとエラーになるようです。

これはMissingとなっている箇所に別のスクリプトをセットするか、
下のようにMissingとなっているコンポーネントごとRemove Componentすることで解決できます。

プレハブ化してスクリプトから使う方法
プレハブ化したオブジェクトは、下のようにスクリプトから生成して使うこともできます。
public class CubeManager : MonoBehaviour {
public GameObject CubeObject;
void Start () {
Instantiate(CubeObject, new Vector3( 0.0f, 0.0f, 0.0f), Quaternion.identity);
}
}
このようなCubeManagerのスクリプトを作成します。
新たにゲームオブジェクトを作り、そこにスクリプトをドラッグアンドドロップします。
ゲームオブジェクトのインスペクター内のCubeObjectに、プレハブをドラッグアンドドロップでセットしましょう。

これで、プログラムの開始時にプレハブからゲームオブジェクトが生成されます。
プログラムを実行してみると、Positionが(0,0,0)の位置にRedCube(Clone)のゲームオブジェクトが生成されました。
ここのCloneとはプレハブから複製されたオブジェクトであることを意味しています。

おすすめアセット
Prefab World Builder

こちらは、ステージ作りが高速化できる便利アセットです。
プレハブを配置する際にまとめて配置したり、面に沿って配置したり、無造作にバラバラに配置するようなことまでできます。
プレハブの設置に関して紹介しきれないほどの便利な機能があり、おすすめできるアセットです。
Prefab Brush+

こちらはプレハブ化したオブジェクトを配置する際、ブラシのように楽に配置できるアセットです。
地形を生成するTerrainと同じような感覚でプレハブを配置することができ、
同じオブジェクトをたくさん配置するときなどの作業スピードが上がります。
まとめ
以上、オブジェクトをプレハブ化して使う方法について解説してきました!
プレハブ化は特にゲーム作りにおいては必ず使う機能です。
使いこなせると開発スピードが格段に上がるのでマスターしたいですね!