本記事で解決するお悩み
シューティングゲームの弾や、アクションゲームの敵キャラクターなど、何度も使いまわしたいオブジェクトは、プレハブ(Prefab)を使うことで簡単に複製することができます。
本記事では、プレハブの基本的な使い方について紹介します。バージョン2022からプレハブがさらに便利に使えるようになったので、それについても実例を交えて解説します。
プレハブ(Prefab)とは?
プレハブは、再利用可能なオブジェクトのことです。プレハブから同じオブジェクトを何度も複製することが可能です。
プレハブでできること
- オブジェクトの使い回しがしやすい: プレハブは、同じオブジェクトを複数の場所で使用できるため、再利用性が高く、開発効率が向上します。
- まとめて変更できる: プレハブを使用すると、プレハブから生成したオブジェクトを一元管理できます。変更や修正が必要な場合、プレハブのみを変更すれば良いため、作業が容易になります。
- ゲーム中にオブジェクトを生成できる: プレハブをシーン内にインスタンス化することで、ランタイム中に新しいオブジェクトを動的に生成できます。これにより、ゲームの中で必要に応じてオブジェクトを追加できます。シューティングゲームの弾やアクションゲームの敵のオブジェクト生成などに使えます。
通常のオブジェクトの複製と何が違う?
通常のオブジェクトで複製自体はオブジェクトを選択して「ctrl + D」(Macは「command + D」)からできますが、あとから複数のオブジェクトのパラメーターを全て変更したい時に、一つ一つ変更させなければなりません。
プレハブを使用すると、変更が必要な場合には一つの場所で修正すれば良いため、修正漏れやヒューマンエラーを防ぐことができます。プレハブに変更があれば、それを使っている全ての複製したオブジェクトに反映されるため、修正作業が効率的に行えます。
オブジェクトをプレハブ化する方法
オブジェクトをプレハブ化するのはとても簡単です。ヒエラルキーからオブジェクトを選択して、プロジェクトビューにドラッグ&ドロップするだけです。
プレハブ化したオブジェクトは青くなります。
オブジェクトの複製
プレハブ化したオブジェクトを複製してみます。ヒエラルキーでオブジェクトを選択してctrl + D、またはプロジェクトビューのプレハブをヒエラルキーへドラッグ&ドロップして複製できます。
プレハブの編集
プレハブを編集することで、複製したオブジェクトを一気に変更させることが可能です。オブジェクトのどれか一つを選択して、インスペクターからプレハブを開いてみましょう。
Openをクリックします。
プレハブの編集モードになります。新たにキューブを追加してみると、他のオブジェクトも同様に変更されているのがわかります。
ちなみに、シーンビュー上部のContextから表示方法を変えられます。Normalを選択すると、通常の見え方になります。Hiddenを選択すると、他のオブジェクトは見えなくなります。
編集モードから戻るときは、ヒエラルキーのこちらを押します。
プレハブ化できない場合
ゲームオブジェクトのインスペクターにアタッチされているスクリプトがMissingとなっている場合、プレハブ化ができないようです。
以下のようにエラーが出てきますので、対象のスクリプトコンポーネントを削除すると、プレハブ化できると思います。
プレハブ関係を解除するには
プレハブ化されているゲームオブジェクトを右クリックして、Prefab > Unpackを選択します。するとプレハブ関係が解除され、通常のオブジェクトに変わります。
UnpackとUnpack Completelyの違い
Unpackの下にUnpack Completelyがありますが、Unpack Completelyではプレハブの子要素にプレハブがあったときに、それらもまとめてプレハブ関係を解除します。
例えば、以下のようにCubeの子要素にSphereのプレハブ化オブジェクトがあったとき、
CubeをUnpackした場合、Cubeのみが解除されます。
CubeをUnpack Completelyすると、中のSphereも解除されます。
ゲーム中にプレハブを生成するスクリプト
プレハブを生成するスクリプトはInstantiate関数で1行でできます。
参考:https://docs.unity3d.com/ja/2018.4/ScriptReference/Object.Instantiate.html
プレハブを生成するスクリプト
Instantiate(生成したいプレハブ, 生成する位置, 角度);
実際の使用例です。ゲーム開始時にプレハブインスタンスを生成します。角度は、特に指定なければQuaternion.identityと入れておきましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstantiatePrefab : MonoBehaviour
{
public GameObject prefab; // プレハブを格納する変数
void Start()
{
// プレハブをインスタンス化して、新しいオブジェクトを作成
GameObject newObject = Instantiate(prefab, new Vector3(0f,0f,2.5f), Quaternion.identity);
}
}
バージョン2022から便利になった点
プレハブの扱いについて簡単に紹介しましたが、バージョン2022から新たに便利になって内容について2点紹介していきます。
まとめてオブジェクトの置き換えができるようになった
プレハブインスタンスをまとめて選択して、他のプレハブに変更することができるようになりました。まずは、置き換えたいオブジェクトを複数選択します。
インスペクターから、置き換えたいプレハブに設定します。
一気に別のプレハブに置き換えられました!
プレハブ編集モードじゃなくてもプレハブの編集がしやすくなった
プレハブインスタンス内へオブジェクトの追加、削除ができるようになりました。以前はこれができず、編集モードでやるしかありませんでした。
下の画像では、カプセルをプレハブインスタンスに追加した時の様子です。プレハブ編集モードに入らずにできています。
この他にも変更点はありますので詳しくはこちらをご覧ください。
おわりに
プレハブの基本的な使い方の解説と、バージョン2022から便利になった点の紹介でした!
以前と比べ使い勝手が良くなっているので、ありがたいですね。
プレハブにバリエーションを持たせる方法をこちらの記事で紹介してます!
プレハブを活用してゲームの世界を作ることができる、おすすめアセットです。