【Unity】 ゲームオブジェクトをプレハブ化するやり方!解除する方法やスクリプトから生成する方法も解説

シューティングゲームの弾や、アクションゲームの敵キャラクターなど、何度も使いまわしたいオブジェクトは、プレハブ(Prefab)を使うことで簡単に複製することができます。

本記事では、プレハブの基本的な使い方について紹介します。バージョン2022からプレハブがさらに便利に使えるようになったので、それについても実例を交えて解説します。

プレハブ(Prefab)とは?

プレハブは、再利用可能なオブジェクトのことです。プレハブから同じオブジェクトを何度も複製することが可能です。

プレハブでできること

  • オブジェクトの使い回しがしやすい: プレハブは、同じオブジェクトを複数の場所で使用できるため、再利用性が高く、開発効率が向上します。
  • まとめて変更できる: プレハブを使用すると、プレハブから生成したオブジェクトを一元管理できます。変更や修正が必要な場合、プレハブのみを変更すれば良いため、作業が容易になります。
  • ゲーム中にオブジェクトを生成できる: プレハブをシーン内にインスタンス化することで、ランタイム中に新しいオブジェクトを動的に生成できます。これにより、ゲームの中で必要に応じてオブジェクトを追加できます。シューティングゲームの弾やアクションゲームの敵のオブジェクト生成などに使えます。

通常のオブジェクトの複製と何が違う?

通常のオブジェクトで複製自体はオブジェクトを選択して「ctrl + D」(Macは「command + D」)からできますが、あとから複数のオブジェクトのパラメーターを全て変更したい時に、一つ一つ変更させなければなりません。

プレハブを使用すると、変更が必要な場合には一つの場所で修正すれば良いため、修正漏れやヒューマンエラーを防ぐことができます。プレハブに変更があれば、それを使っている全ての複製したオブジェクトに反映されるため、修正作業が効率的に行えます。

オブジェクトをプレハブ化する方法

オブジェクトをプレハブ化するのはとても簡単です。ヒエラルキーからオブジェクトを選択して、プロジェクトビューにドラッグ&ドロップするだけです。

プレハブ化したオブジェクトは青くなります。

オブジェクトの複製

プレハブ化したオブジェクトを複製してみます。ヒエラルキーでオブジェクトを選択してctrl + D、またはプロジェクトビューのプレハブをヒエラルキーへドラッグ&ドロップして複製できます。

プレハブの編集

プレハブを編集することで、複製したオブジェクトを一気に変更させることが可能です。オブジェクトのどれか一つを選択して、インスペクターからプレハブを開いてみましょう。

Openをクリックします。

プレハブの編集モードになります。新たにキューブを追加してみると、他のオブジェクトも同様に変更されているのがわかります。

ちなみに、シーンビュー上部のContextから表示方法を変えられます。Normalを選択すると、通常の見え方になります。Hiddenを選択すると、他のオブジェクトは見えなくなります。

編集モードから戻るときは、ヒエラルキーのこちらを押します。

プレハブ化できない場合

ゲームオブジェクトのインスペクターにアタッチされているスクリプトがMissingとなっている場合、プレハブ化ができないようです。

以下のようにエラーが出てきますので、対象のスクリプトコンポーネントを削除すると、プレハブ化できると思います。

プレハブ関係を解除するには

Screenshot

プレハブ化されているゲームオブジェクトを右クリックして、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から便利になった点の紹介でした!

以前と比べ使い勝手が良くなっているので、ありがたいですね。

プレハブにバリエーションを持たせる方法をこちらの記事で紹介してます!

プレハブを活用してゲームの世界を作ることができる、おすすめアセットです。

タイトルとURLをコピーしました