Unity 複製とプレハブインスタンス の違い

今回は、ゲームエンジン Unity のシーンに複数の同じ敵キャラなどのゲームオブジェクトを配置する際の、複製とプレハブインスタンスの違いについて紹介します。

Unity プレハブインスタンスの値を変更してから Overrides の Apply All ボタンを押すとそのプレハブとプレハブインスタンス群の値が一括で同じく変更されます.

※ Unity のバージョンは 2021.3.25f1 Personal <DX11> です。

サンプルのゲームオブジェクト

最初に、複製とプレハブインスタンスの違いのサンプルに用いるゲームオブジェクト「 PingPongCube(ピンポンキューブ) 」を説明します。

Unity 一定間隔で往復させるスクリプトをつけた Cube

Hierarchy ウィンドウで右クリックして「3D オブジェクト」→「 Cube 」を選択します。
※プロジェクトのテンプレートは 3D です。 2D の場合は Sprite の Square などを選択しても構いません。

Hierarchy ウィンドウの余白で右クリックして 3D オブジェクト>Cubeを選択して Cube を配置します.

作成した Cube に、一定間隔で指定された方向と逆方向を往復するスクリプトをコンポーネントとして追加します。
※ Hierarchy ウィンドウでわかりやすいように名前を PingPongCube に変更しました。

Unity 作成した Cube ゲームオブジェクトを選択してから Project ウィンドウのスクリプトを Inspctor ウィンドウにドラッグ&ドロップで追加します.

追加するスクリプトは以下です。処理についてはコメントを参照してください。
※自己責任でご利用ください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StudyPrefabVariantCube : MonoBehaviour
{
    /// <summary>
    /// HP です。
    /// </summary>
    public int Hp = 5;

    /// <summary>
    /// 1 秒あたりの移動量です。
    /// </summary>
    public Vector3 Speed = Vector3.one;

    /// <summary>
    /// TurnInterval の初期値です。
    /// </summary>
    public float TurnIntervalInit = 1f;

    /// <summary>
    /// 向きを反転する時間間隔の計測値です。
    /// </summary>
    private float TurnInterval = 0f;

    /// <summary>
    /// 現在の向きです。TurnInterval ごとに反転します。
    /// </summary>
    float Direction = 1f;

    // Start is called before the first frame update
    void Start()
    {
        TurnInterval = TurnIntervalInit;
    }

    // Update is called once per frame
    void Update()
    {
        // 指定した時間が経過したら、移動方向を逆方向に変更します。
        TurnInterval -= Time.deltaTime;
        if (TurnInterval < 0f)
        {
            Direction *= -1f;
            TurnInterval = TurnIntervalInit;
        }
        // 移動します。
        this.transform.position += Speed * Direction * Time.deltaTime;
    }
}

これにより Cube ゲームオブジェクトに

  • HP
  • 移動方向
  • 向きを反転する時間

のプロパティを持った反復移動するスクリプトがコンポーネントとして追加されました。
#Transform の角度や拡大率で説明しようとしたのですが、プレハブでも上書きされないので独自のスクリプトを用意しました。

ここからは、スクリプトのプロパティを少しずつ変更しながら、複製とプレハブインスタンスの違いを説明します。

複製したゲームオブジェクト同士の関係

複製したゲームオブジェクトは、それぞれお複製元と複製先で同じ設定を持ちますが、互いに関係性はありません。

複製の手順

シーンに配置してあるゲームオブジェクトを複製するには、 Hierarchy ウィンドウで対象のゲームオブジェクトを右クリックして、メニューから複製を選択します。
※ Ctrl + C, Ctrl + V などのコピー&ペーストでも同様に複製できます。

Unity Hierarchy ウィンドウで複製元のゲームオブジェクトの右クリックメニュー Duplicate で同じ位置に複製されます.

複製されたゲームオブジェクトは位置も含めて全て同じ設定です。

Unity 複製したゲームオブジェクトは複製元と設定が同じです.

複製したゲームオブジェクト群は無関係

複製したゲームオブジェクトは、同じ設定を持ちますが、プレハブインスタンスとは異なり、 Inspector ウィンドウに Overrides はありません。
そのため、複製して増やしたゲームオブジェクトの値を修正したい場合は、1つずつ変更する必要があります。
※ Overrides については後述します。

Unity 複製した―ゲームオブジェクトにはプレハブインスタンスの Overrides はなく、値を変更する場合は個別に変更する必要があります.

複製したゲームオブジェクトの反復する時間を変更しても、もう一方のゲームオブジェクトに反映できないので、異なる間隔で反復するようになります。

Unity 一定間隔で往復させるスクリプトをつけた Cube を複製してパラメータを変えても複製には反映されません。

プレハブインスタンス同士の関係

プレハブは、ゲームオブジェクトの設定をアセットとして保持し、プレハブインスタンスを作るために必要です。

Unity の Prefab (プレハブ) システムでは、1 つのゲームオブジェクトをそのすべてのコンポーネント、プロパティ値、子ゲームオブジェクトとまとめて、再利用可能なアセットとして作成、設定、保存することができます。

プレハブ – Unity マニュアル

プレハブインスタンスは、共通するプレハブを持っています。
共通するプレハブの変更が一括で反映されるので、パラメータの調整などを行う場合に手間が減ります。

プレハブとプレハブインスタンスの作成の手順

プレハブは、ゲームオブジェクトから作れます。
Hierarchy シーンのゲームオブジェクトを Project ウィンドウの任意のフォルダにドラッグ&ドロップすると、そのゲームオブジェクトの設定を持つプレハブが作成されます。

この時点で、ドラッグ&ドロップしたゲームオブジェクトも青色になりプレハブインスタンスになります。

Project ウィンドウのプレハブアセットをシーンにドラッグ&ドロップすると、同じ設定を持つプレハブインスタンスが新たに作成・配置されます。

Unity ゲームオブジェクトからプレハブを作成して、プレハブからプレハブインスタンスを作成して配置します.

プレハブインスタンスはプレハブを介して一括で変更できる

プレハブインスタンスの一つの値を変更しても、複製と同様に別のプレハブインスタンスには影響しません。

Unity プレハブインスタンスの値を一部変更します.
Unity 一定間隔で往復させるスクリプトをつけた Cube のプレハブを作成してプレハブインスタンスを追加した後、片方のパラメータを変えてももう片方には反映されません。

しかし、プレハブインスタンスの Overrides を使用することで、同じプレハブを持つプレハブインスタンスを一括で変更することができます。

Unity のプレハブを作成してプレハブインスタンスを追加した後、片方のパラメータを変えからオーバーライドすると全てのプレハブインスタンスが同じ値に再設定されます。

Inspector ウィンドウの右上の Overrides ドロップダウンを表示して「 Apply All 」ボタンを押すと、変更がプレハブに反映され、他の同じプレハブから作成されたプレハブインスタンスの値も一括で変更されます。

Unity プレハブインスタンスの値を変更してから Overrides の Apply All ボタンを押すとそのプレハブとプレハブインスタンス群の値が一括で同じく変更されます.

同じ設定の敵キャラなどをいくつも配置して、少し HP を調整したいときなどには、プレハブを使うと複製よりも簡単に変更が行えます。

まとめ

今回は、ゲームエンジン Unity のシーンに複数の同じ敵キャラなどのゲームオブジェクトを配置する際の、複製とプレハブインスタンスの違いについて紹介しました。

プレハブインスタンスは、複数の同じプレハブを持つプレハブインスタンスの値を一括して変えられる Overrides の機能があり、多く配置する敵キャラなどのパラメータの微調整などに便利です。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

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