現場レベルのゲーム制作が、すべてここで学べます。
「複製ってどういうこと?」
「なんか青くなったけど、なぜ?」
Unityを触り始めたばかりのころ、こんなギモンで止まってしまうことはよくあります。
結局プレハブ(Prefabs)は何ができるのか・・・とお考えのあなたに、この記事では、プレハブを「5分で理解して、実際に1回作れる」ところまでを目指します。
むずかしい説明は後回しにして、まずは手を動かしてみましょう!
プレハブとは?まず「たとえ」で理解しよう
プレハブとは、「オブジェクトのコピー元となるデータ(テンプレート)」のことです。
ひとことで言うと、「スタンプの版(はん)」みたいなものです。
スタンプで考えてみよう
スタンプを押すとき、「版(はん)」が手元にありますよね。
その版を押すたびに、同じマークがどんどん増やせます。
Unityのプレハブも、同じ考え方です。
- プレハブ=スタンプの版(コピー元のデータ)
- インスタンス=スタンプを押してできた印(ゲーム内に置かれたコピー)
「インスタンス」というのは、プレハブをゲーム画面に置いたときにできる「コピー品」のことです。
同じプレハブから何個でも複製(コピー)できます。
Hierarchy(ヒエラルキー)とProject(プロジェクト)の違い
Unityの画面には「Hierarchy(ヒエラルキー)」と「Project(プロジェクト)」があります。
ここを混同してしまう人がとても多いので、先に整理しておきましょう。
- Hierarchy(ヒエラルキー)=今のゲーム画面に「実際に置いてあるもの」の一覧
- Project(プロジェクト)=素材やデータを保存しておく「ファイル棚」
プレハブはProjectに保存されているデータです。
それをHierarchyやSceneにドラッグすると「インスタンス(コピー品)」が生まれます。
まずは実際に作ってみよう(ここ最重要!)
説明はここまでにして、さっそく手を動かしてみましょう。
プレハブを1回作れたら、もう理解の8割は完了です。
ステップ1:HierarchyにCubeを作る
- Hierarchyウィンドウで右クリック
- 「3D Object」→「Cube」を選択
- HierarchyにCubeが追加されればOK

ステップ2:ProjectウィンドウにドラッグしてProjectに保存する
- HierarchyのCubeをProjectウィンドウにドラッグ&ドロップする
- Projectの中に「Cube.prefab」というファイルができる
- HierarchyのCubeの名前が青色に変わる


「青くなった!」これがプレハブ化された合図です。
- 白い名前=普通のオブジェクト(プレハブではない)
- 青い名前=プレハブのインスタンス(プレハブと連動している)
これでプレハブの作成は完了です。思ったより簡単でしたよね!
インスタンス(複製)を作ってみよう
プレハブができたら、次はコピーを量産してみましょう。
- ProjectウィンドウのAssets直下にある「Cube」を、Hierarchyにドラッグ&ドロップする
- Hierarchyに「Cube」「Cube (1)」「Cube (2)」…と増えていく

これらひとつひとつが「インスタンス」です。
全員、同じプレハブから生まれた「同族」です。
プレハブを編集して「一括変更」を体感しよう
ここがプレハブで一番スゴいところです。
プレハブ本体を変更すると、すべてのインスタンスに一括で反映されます。
実際に色を変えて確かめてみましょう。
準備:Materialを作る
Cubeの色を変えるには「Material(マテリアル)」というデータが必要です。
デフォルトのCubeにはMaterialがないので、まず新しく1つ作ります。
- Projectウィンドウの何もない場所で右クリック
- 「Create」→「Material」を選択
- ファイル名を「RedMaterial」にして決定(Enterキー)
- ProjectウィンドウにRedMaterialが追加される

RedMaterialを赤色に設定する
- ProjectウィンドウのRedMaterialを1回クリックして選択する
- 画面右側のInspectorを見ると「Surface Inputs(サーフェスインプット)」という項目がある
- その中の「Base Map(ベースマップ)」の右にある白い四角をクリックする
- カラーピッカー(色を選ぶウィンドウ)が開くので、赤色を選んで閉じる
- Base Mapの四角が赤くなればOK


プレハブ編集モードに入ってMaterialを適用する
次に、プレハブ本体を編集します。
プレハブを編集するときは「プレハブ編集モード」という専用の画面に入ります。
- ProjectウィンドウのCube.prefabをダブルクリックする
- Sceneビュー上部のパンくずリストが「Scenes | Cube」という表示に変わる(これがプレハブ編集モードに入った合図)
- ProjectウィンドウのRedMaterialを、SceneビューのCubeへドラッグ&ドロップする
- SceneビューのCubeが赤くなることを確認

プレハブ編集モードを終了する
- Hierarchyウィンドウの一番上を見ると「<」という矢印ボタンがある
- その「<」をクリックして通常モードに戻る
- Sceneビューを見ると、さっき複製したすべてのCubeが赤くなっている!


プレハブ本体を1回変更しただけで、Scene上の全インスタンスに反映されました。
これが「一括変更」の力です。
プレハブを使わずに100体配置していたら、1体ずつ手作業で変更しなければなりません。
プレハブなら元を1回変えるだけで全員に反映されます。
インスタンスだけを個別に変更することもできる
「全体は赤のままで、この1体だけ青にしたい」という場面もあります。
Hierarchyで特定のインスタンスを選んで変更すると、そのインスタンスだけ上書き設定されます。

このとき、Inspectorの上部に「Overrides(オーバーライズ)」というボタンが出てきます。

- Apply All:個別の変更をプレハブ本体にも反映する(全インスタンスに広がる)
- Revert All:個別の変更を取り消して、プレハブの設定に戻す
「Apply Allは押さない=そのインスタンスだけ変更のまま」と覚えておきましょう。

プレハブ・初心者が100%つまずくポイント集
実際にやってみたとき「あれ?これなんでこうなるの??」という疑問が出てくるかと思います。
よくある疑問をまとめておきます。
HierarchyのCubeの名前がなんで青くなるの?
プレハブ化したオブジェクトは、HierarchyでもProjectのデータと連動しているため名前が青く表示されます。
つまり青い名前=プレハブと連動中、白い名前=ただのオブジェクト(プレハブではない)という意味です。
ドラッグしても青くならない場合は、ProjectウィンドウのAssetsの中にちゃんとドロップできていない可能性があります。もう一度試してみましょう。
プレハブのデータはHierarchyとProjectのどちらにある?
プレハブ本体はProjectに、ゲーム画面に置いたコピー(インスタンス)はHierarchyに存在します。
- Project:プレハブの「素材ファイル」が保存されている場所。ここにあるだけではゲームに出てこない
- Hierarchy:今のシーン(ゲーム画面)に置かれたインスタンスが並ぶ場所。ここにあるものがゲームに表示される
「プレハブ本体はProject、ゲームに出てくるコピーはHierarchy」と覚えておきましょう。
インスタンスを個別変更したのに全部変わってしまった
インスタンスを個別に変更すると、InspectorのPrefab欄の下に「Overrides(オーバーライズ)」ボタンが出てきます。
これは「このインスタンスはプレハブ本体と設定が違うよ」というサインです。
- Apply All(アプライオール):個別に変更した内容をプレハブ本体にも反映する。押すと全インスタンスに広がる
- Revert All(リバートオール):個別の変更を取り消して、プレハブの設定に戻す
「このインスタンスだけ変えたい」場合はApply Allは押さずにそのままにしておきましょう。
元に戻したい場合はCtrl+Z(Mac:Command+Z)で取り消しできます。
プレハブを使うメリットは?
ここで改めて「なぜプレハブを使うのか」を整理します。
プレハブなしで敵を100体つくったら…
「敵キャラを100体ばらまくゲームを作ろう!」となったとします。
プレハブなしで100体配置した後、「やっぱり敵の色を変えたい」となったら…
100体をひとつずつ手作業で変更しなければなりません。
これは地獄です。
でもプレハブ1つを変更するだけで100体すべてに反映されます。
- 量産できる:ドラッグするだけで何個でも複製
- 一括変更できる:元を変えれば全インスタンスに反映
- スクリプトから生成できる:ゲーム中に動的にオブジェクトを出現させられる
- 作業効率が大幅UP:大規模なゲームでも管理しやすい
スクリプトでCubeを自動生成してみよう(サンプルコード)
ここまでは手でドラッグしてCubeを複製してきました。
でも実際のゲームでは、「クリックしたら敵が出現する」「一定時間ごとにアイテムが降ってくる」のように、プログラムからプレハブを自動生成することがほとんどです。
先ほど作ったCube.prefabを使って、「クリックするたびにCubeが生まれる」コードを試してみましょう。
ステップ1:C#スクリプトを作る
- Projectウィンドウで右クリック
- 「Create」→「Scripting」→「MonoBehaviour Script」を選択
- ファイル名を PrefabSpawner にする(名前はあとで変えると動かなくなるので注意!)
ステップ2:コードを書く
- PrefabSpawner.csをダブルクリックするとコードエディターが開く(通常はVisual Studio(ビジュアルスタジオ)が開く。VSCodeを設定している場合はVSCodeが開く)
- 最初から書いてあるコードを全部消して、以下をそのままコピペする
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using UnityEngine; using UnityEngine.InputSystem; public class PrefabSpawner : MonoBehaviour { // ① Inspectorでプレハブをセットするための変数 public GameObject prefab; // 何個生成したか数える変数 int count = 0; void Update() { // ② マウスの左ボタンをクリックしたとき if (Mouse.current.leftButton.wasPressedThisFrame) { // ③ 1個ずつ上に積み重ねてプレハブを生成する Instantiate(prefab, new Vector3(0, count, 0), Quaternion.identity); count++; } } } |
コードを貼ったらCtrl+S(Mac:Command+S)で保存してください。
コードの意味をひとつずつ確認しよう
- ① public GameObject prefab:「どのプレハブを使うか」をInspectorから指定できるようにする変数。ここにCubeをセットします
- int count = 0:何個生成したかを数える変数。0から始まって1個生成するごとに増えていく
- ② Mouse.current.leftButton.wasPressedThisFrame:マウスの左ボタンが押された瞬間を検知する(Unity 6のInput System対応)
- ③ Instantiate():プレハブをゲーム内に生成(コピー)する命令。new Vector3(0, count, 0)でY座標をcountの数だけずらすことで1個ずつ上に積み重なる
- count++:生成するたびにcountを1増やす。次のCubeは1つ上に生成される
C#について詳しくはこちらで解説しています。
ステップ3:スクリプトをGameObjectにアタッチする
スクリプトは書いただけでは動きません。GameObjectに「貼り付ける」作業が必要です。
この「貼り付ける」ことをアタッチ(Attach)と呼びます。
Unityでは「このオブジェクトにこの機能を持たせる」ためにスクリプトをアタッチします。アタッチしないと、スクリプトを作っても何も起きません。
- Hierarchyウィンドウで右クリック→「Create Empty(クリエイトエンプティ)」を選択
- 「GameObject(ゲームオブジェクト)」という名前の空のオブジェクトが作られる
- HierarchyのGameObjectをクリックして選択する
- ProjectウィンドウのPrefabSpawnerを、Inspectorウィンドウにドラッグ&ドロップする
- Inspectorに「Prefab Spawner (Script)」という欄が追加されればアタッチ成功

ステップ4:InspectorにCube.prefabをセットする
コードの「①」で作ったprefab変数に、実際のCube.prefabを登録します。
- HierarchyのGameObject内にある「PrefabSpawner」をクリックして選択する
- InspectorのPrefab Spawner (Script)の中に「Prefab」という欄がある(「None (Game Object)」と表示されている)
- ProjectウィンドウのAssets直下の「Cube」をその欄にドラッグ&ドロップ
- 「None」が「Cube」に変わればセット完了

ステップ5:実際に動かしてみよう!
- 上の▶ Playボタンを押してゲームを開始する
- Gameビュー(黒い画面)をマウスでクリックする
- クリックするたびにCubeが積み重なって生成される!
- Hierarchyを見ると「Cube(Clone)」が増えていく


「Clone(クローン)」という名前がついているのが、スクリプトで生成されたインスタンスの証拠です。
これが「動的なインスタンス生成」です。
敵の出現・弾の発射・コインのばらまきなど、ゲーム制作の至るところでこのInstantiateを使います。
(補足)プレハブバリアントとは?
余裕が出てきたら「プレハブバリアント」も知っておくと便利です。
深掘りは別記事に任せますが、ひとことで言うとこんなイメージです。
- プレハブバリアント=「元のプレハブを引き継ぎつつ、一部だけ変えた派生版」
- 例:赤い敵を元にして「青くて体力が2倍の強い敵」を作る、など
まずは通常のプレハブを使いこなしてから、あとでチャレンジしてみてください。
まとめ
プレハブについて、ポイントをまとめます。
- プレハブ=「コピー元のテンプレートデータ」。Projectに保存される
- インスタンス=「プレハブから複製されたコピー品」。Hierarchyに並ぶ
- HierarchyのオブジェクトをProjectにドラッグするだけでプレハブ化できる
- プレハブ(元データ)を変更すると全インスタンスに一括反映される
- Instantiate()を使えばスクリプトからも動的に生成できる
- 青い名前=プレハブのインスタンス。白い名前=ただのオブジェクト
プレハブは最初は「なんか難しそう」と感じる機能ですが、1回作れてしまえばあとは慣れるだけです。
今日の手順を参考に、まずはCube1個でいいので、実際にプレハブを作ってみてください!
「あ、青くなった!」という瞬間が、Unity理解の大きな一歩になります。
次のステップとして、プレハブを使ったシューティングゲームの弾の実装なども挑戦してみましょう。
Unity入門の森では、初心者向けに丁寧な解説動画・講座を多数用意しています。
「次は何を学べばいいかわからない」と感じたら、ぜひ講座をのぞいてみてください。
現場レベルのゲーム制作が、すべてここで学べます。





コメント