Unityのプレハブ(Prefab)とは?初心者でもわかる使い方と作り方 | Unity入門の森 ゲームの作り方

Unityのプレハブ(Prefab)とは?初心者でもわかる使い方と作り方

UnityのTips

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

「プレハブって何?」
「複製ってどういうこと?」
「なんか青くなったけど、なぜ?」

Unityを触り始めたばかりのころ、こんなギモンで止まってしまうことはよくあります。

結局プレハブ(Prefabs)は何ができるのか・・・とお考えのあなたに、この記事では、プレハブを「5分で理解して、実際に1回作れる」ところまでを目指します。

むずかしい説明は後回しにして、まずは手を動かしてみましょう!

【ゲームの作り方講座プレゼント中!】

プレハブとは?まず「たとえ」で理解しよう

プレハブとは、「オブジェクトのコピー元となるデータ(テンプレート)」のことです。

ひとことで言うと、「スタンプの版(はん)」みたいなものです。

スタンプで考えてみよう

スタンプを押すとき、「版(はん)」が手元にありますよね。

その版を押すたびに、同じマークがどんどん増やせます。

Unityのプレハブも、同じ考え方です。

  • プレハブ=スタンプの版(コピー元のデータ)
  • インスタンス=スタンプを押してできた印(ゲーム内に置かれたコピー)

「インスタンス」というのは、プレハブをゲーム画面に置いたときにできる「コピー品」のことです。

同じプレハブから何個でも複製(コピー)できます。

Hierarchy(ヒエラルキー)とProject(プロジェクト)の違い

Unityの画面には「Hierarchy(ヒエラルキー)」と「Project(プロジェクト)」があります。

ここを混同してしまう人がとても多いので、先に整理しておきましょう。

  • Hierarchy(ヒエラルキー)=今のゲーム画面に「実際に置いてあるもの」の一覧
  • Project(プロジェクト)=素材やデータを保存しておく「ファイル棚」

プレハブはProjectに保存されているデータです。

それをHierarchyやSceneにドラッグすると「インスタンス(コピー品)」が生まれます。

まずは実際に作ってみよう(ここ最重要!)

説明はここまでにして、さっそく手を動かしてみましょう。

プレハブを1回作れたら、もう理解の8割は完了です。

ステップ1:HierarchyにCubeを作る

  1. Hierarchyウィンドウで右クリック
  2. 「3D Object」→「Cube」を選択
  3. HierarchyにCubeが追加されればOK

ステップ2:ProjectウィンドウにドラッグしてProjectに保存する

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

「青くなった!」これがプレハブ化された合図です。

  • 白い名前=普通のオブジェクト(プレハブではない)
  • 青い名前=プレハブのインスタンス(プレハブと連動している)

これでプレハブの作成は完了です。思ったより簡単でしたよね!

インスタンス(複製)を作ってみよう

プレハブができたら、次はコピーを量産してみましょう。

  1. ProjectウィンドウのAssets直下にある「Cube」を、Hierarchyにドラッグ&ドロップする
  2. Hierarchyに「Cube」「Cube (1)」「Cube (2)」…と増えていく

これらひとつひとつが「インスタンス」です。

全員、同じプレハブから生まれた「同族」です。

プレハブを編集して「一括変更」を体感しよう

ここがプレハブで一番スゴいところです。

プレハブ本体を変更すると、すべてのインスタンスに一括で反映されます。

実際に色を変えて確かめてみましょう。

準備:Materialを作る

Cubeの色を変えるには「Material(マテリアル)」というデータが必要です。

デフォルトのCubeにはMaterialがないので、まず新しく1つ作ります。

  1. Projectウィンドウの何もない場所で右クリック
  2. 「Create」→「Material」を選択
  3. ファイル名を「RedMaterial」にして決定(Enterキー)
  4. ProjectウィンドウにRedMaterialが追加される

RedMaterialを赤色に設定する

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

プレハブ編集モードに入ってMaterialを適用する

次に、プレハブ本体を編集します。

プレハブを編集するときは「プレハブ編集モード」という専用の画面に入ります。

  1. ProjectウィンドウのCube.prefabをダブルクリックする
  2. Sceneビュー上部のパンくずリストが「Scenes | Cube」という表示に変わる(これがプレハブ編集モードに入った合図)
  3. ProjectウィンドウのRedMaterialを、SceneビューのCubeへドラッグ&ドロップする
  4. SceneビューのCubeが赤くなることを確認

プレハブ編集モードを終了する

  1. Hierarchyウィンドウの一番上を見ると「」という矢印ボタンがある
  2. その「」をクリックして通常モードに戻る
  3. 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#スクリプトを作る

  1. Projectウィンドウで右クリック
  2. 「Create」→「Scripting」→「MonoBehaviour Script」を選択
  3. ファイル名を PrefabSpawner にする(名前はあとで変えると動かなくなるので注意!)

ステップ2:コードを書く

  1. PrefabSpawner.csをダブルクリックするとコードエディターが開く(通常はVisual Studio(ビジュアルスタジオ)が開く。VSCodeを設定している場合はVSCodeが開く)
  2. 最初から書いてあるコードを全部消して、以下をそのままコピペする

コードを貼ったら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では「このオブジェクトにこの機能を持たせる」ためにスクリプトをアタッチします。アタッチしないと、スクリプトを作っても何も起きません。

  1. Hierarchyウィンドウで右クリック→「Create Empty(クリエイトエンプティ)」を選択
  2. 「GameObject(ゲームオブジェクト)」という名前の空のオブジェクトが作られる
  3. HierarchyのGameObjectをクリックして選択する
  4. ProjectウィンドウのPrefabSpawnerを、Inspectorウィンドウにドラッグ&ドロップする
  5. Inspectorに「Prefab Spawner (Script)」という欄が追加されればアタッチ成功

ステップ4:InspectorにCube.prefabをセットする

コードの「①」で作ったprefab変数に、実際のCube.prefabを登録します。

  1. HierarchyのGameObject内にある「PrefabSpawner」をクリックして選択する
  2. InspectorのPrefab Spawner (Script)の中に「Prefab」という欄がある(「None (Game Object)」と表示されている)
  3. ProjectウィンドウのAssets直下の「Cube」をその欄にドラッグ&ドロップ
  4. 「None」が「Cube」に変わればセット完了

ステップ5:実際に動かしてみよう!

  1. 上の▶ Playボタンを押してゲームを開始する
  2. Gameビュー(黒い画面)をマウスでクリックする
  3. クリックするたびにCubeが積み重なって生成される!
  4. Hierarchyを見ると「Cube(Clone)」が増えていく

 

Clone(クローン)」という名前がついているのが、スクリプトで生成されたインスタンスの証拠です。

これが「動的なインスタンス生成」です。

敵の出現・弾の発射・コインのばらまきなど、ゲーム制作の至るところでこのInstantiateを使います。

(補足)プレハブバリアントとは?

余裕が出てきたら「プレハブバリアント」も知っておくと便利です。

深掘りは別記事に任せますが、ひとことで言うとこんなイメージです。

  • プレハブバリアント=「元のプレハブを引き継ぎつつ、一部だけ変えた派生版」
  • 例:赤い敵を元にして「青くて体力が2倍の強い敵」を作る、など

まずは通常のプレハブを使いこなしてから、あとでチャレンジしてみてください。

まとめ

プレハブについて、ポイントをまとめます。

  • プレハブ=「コピー元のテンプレートデータ」。Projectに保存される
  • インスタンス=「プレハブから複製されたコピー品」。Hierarchyに並ぶ
  • HierarchyのオブジェクトをProjectにドラッグするだけでプレハブ化できる
  • プレハブ(元データ)を変更すると全インスタンスに一括反映される
  • Instantiate()を使えばスクリプトからも動的に生成できる
  • 青い名前=プレハブのインスタンス。白い名前=ただのオブジェクト

プレハブは最初は「なんか難しそう」と感じる機能ですが、1回作れてしまえばあとは慣れるだけです。

今日の手順を参考に、まずはCube1個でいいので、実際にプレハブを作ってみてください!

「あ、青くなった!」という瞬間が、Unity理解の大きな一歩になります。

次のステップとして、プレハブを使ったシューティングゲームの弾の実装なども挑戦してみましょう。

Unity入門の森では、初心者向けに丁寧な解説動画・講座を多数用意しています。

「次は何を学べばいいかわからない」と感じたら、ぜひ講座をのぞいてみてください。

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

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