プレハブ
コンポーネント、プロパティー、子ゲームオブジェクトを持った一つのゲームオブジェクトを再利用可能なアセット「プレハブ」 (Prefab) として作成し、保存することができる。プレハブをインスタンス化してシーンに配置した場合、元のプレハブアセットに加えた編集は全てのプレハブインスタンスに反映される。プレハブインスタンスの一部の設定を変更したい場合は「オーバーライド」を使用することができる。一連のオーバーライドを継承するプレハブバリアントを作成することができる。
公式サイト:
使い方
参考:
Unity 2018.3 以降における Prefab の使い方をちゃんと理解する | LIGHT11
概要
参考:
新しい Prefab システム | kurihara-n の日記
2分で理解!プレハブとは?使い方までご紹介 | Unishar
Unity 2018.3 の Prefab ワークフローの実用について考える | てっくぼっと!
新しい Prefab ワークフローについて考えてみた – Qiita
新しいプレハブワークフローのご紹介 | Unity Technologies Blog
ココが変わる!Unity の新しいエディタワークフロー | Unity Technologies Blog
入門
参考:
2018.3 以降のプレハブの基本操作 | Unity Connect
プレハブモード
ドキュメント:
プレハブモードでのプレハブの編集 | Unity マニュアル [公式]
Nested Prefab
参考:
展開する (Unpack)
「アンパック」 (Unpack) を実行するとプレハブインスタンスの内容を個別のゲームオブジェクトに展開する。
- Unpack Prefab:入れ子になったプレハブはプレハブの状態を維持したままで、プレハブの1階層目のみ展開される。
- Unpack Prefab Completely:入れ子になったプレハブも全て、それぞれのゲームオブジェクトに展開される。
ドキュメント:
プレハブインスタンスの展開 | Unity マニュアル [公式]
参考:
Hierarchy にある GameObject の Prefab を解除する方法 | はなちるのマイノート
プレハブバリアント
プレハブバリアントを作成するには、プロジェクトウィンドウのプレハブを右クリックして「Create > Prefab Variant」を実行する。プレハブバリアントにオーバーライドを持たせるためには、該当するプレハブバリアントをプレハブモードで開いて編集を行う。
既存のプレハブインスタンスからプレハブバリアントを作成したい場合は、ヒエラルキーウィンドウのプレハブインスタンスをプロジェクトウィンドウにドラッグし、「Create Prefab」ダイアログで「Prefab Variant」を選択してプレハブバリアントを作成する。
ドキュメント:
プレハブバリアント | Unity 2018.4 マニュアル [公式]
インスタンスオーバーライド
ドキュメント:
インスタンスのオーバーライド | Unity マニュアル [公式]
プレハブを作成する
ドキュメント:
プレハブを編集する
ドキュメント:
プレハブモードでのプレハブの編集 | Unity マニュアル [公式]
インスタンスを通したプレハブの編集 | Unity マニュアル [公式]
参考:
What is the proper way to edit prefabs – Unity Answers
FBX の扱い
FBX をプレハブとして扱い、プレハブを作成してゲーム内で使用するプレイヤーやシーン内のオブジェクト、アイテムなどとして使用する。FBX 内のオブジェクト名や階層構造を変更すると、それらのオブジェクトに紐づいていたプレハブバリアントを編集して適用したオーバーライドの情報は消えてしまう。
ドキュメント:
Working with Model Prefabs and FBX Prefab Variants | FBX Exporter 5.0 Manual [Official]
参考:
Unity 2018.3 以降で FBX を Prefab 化して正しく取り扱う | LIGHT11
FBX 更新後に Prefab を再作成すべきか? – Qiita
FBX からの Prefab 生成/更新を自動化する | LIGHT11
プレハブで置き換える
プロジェクトウィンドウのプレハブを Alt
キーを押しながらドラッグしてヒエラルキーウィンドウのゲームオブジェクトにドロップすれば、対象のゲームオブジェクトをプレハブに置き換えることができる。
参考:
Alt キーを押しながらプレハブをゲームオブジェクトにドラッグすると置き換えることができる | コガネブログ
Replace prefab – Unity Answers
Replace game object with prefab? – Unity Forum
スクリプトで置き換える
参考:
プレハブを一括で差し替える | RogueLive 公式ブログ
Replace GameObjects or Prefabs with another Prefab | Unity3D.College
Replacing all objects in scene with another object – Game Development Stack Exchange
モデルの差し替え
ドキュメント:
Mesh Renderer | Unity マニュアル [公式]
Skinned Mesh Renderer | Unity マニュアル [公式]
参考:
Prefab のモデルの差し替えを、セットしたコンポーネントを一々付け直さずに行う方法 | テラシュールブログ
キャラクターモデルを差し替える時にコンポーネントの付け替えを自動化したい話 | soy-software
How do i officially replace a FBX file? – Unity Forum
Keep the prefab connection when updating FBX asset – Stack Overflow
Keep the prefab connection with FBX – Game Development Stack Exchange
How do I change the mesh in an existing prefab in Unity? – Game Development Stack Exchange
スクリプトでランタイムにインスタンスを作成する (Instantiate)
ドキュメント:
ランタイムのプレハブのインスタンス化 | Unity マニュアル [公式]
Object.Instantiate | Unity スクリプトリファレンス [公式]
参考:
Prefab を Instantiate して楽にオブジェクトを配置 | エクスプラボ
Prefab を使ったオブジェクト生成/複製/削除等の方法 | XR-Hub
Prefab を生成する方法徹底解説 | 渋谷ほととぎす通信
スクリプトから Prefab のインスタンスを作る方法 – Qiita
Prefab と Instantiate の基本 – Qiita
How do I instantiate a prefab through a script correctly? – Stack Overflow
SetParent
ドキュメント:
Transform.SetParent | Unity スクリプトリファレンス [公式]
Transform.parent | Unity スクリプトリファレンス [公式]
参考:
Transform の SetParent で親子関係を設定して表示を整理する | エクスプラボ
Transform.SetParent の第2引数に渡す値によって何が変わるか | コガネブログ
スクリプトで操作する
参考:
スクリプトから Prefab を操作する (Unity 2018.3 以降) | LIGHT11
インスタンスを破壊する (Destroy)
プレハブインスタンスを破壊するには Destroy
メソッドを使う。
obj = Instantiate(buildingPrefab); Destroy(obj);
ドキュメント:
Object.Destroy | Unity スクリプトリファレンス [公式]
ゲームオブジェクトの作成および削除 | Unity 2019.4 マニュアル [公式]
ゲームオブジェクトの作成および削除 - GameObject | Unity マニュアル [公式]
参考:
How to destroy an instantiated prefab in C#? - Unity Answers
Destroy instantiated object instead of prefab - Unity Answers
ガベージコレクション (GC)
参考:
コンポーネントが Destroy されても、オブジェクトが GC で回収されないかもしれない話 - Qiita
Prefab Editing Environments
プレハブ編集の際に使用するシーンを設定する。
- Regular Environment
- UI Environment
ドキュメント:
参考:
Unity 2018.3 からの Prefab ワークフロー | ゴイサギ日記
新たな Prefab ワークフローで Prefab の RootCanvas の RectTransform が崩れる問題の対策 - Qiita
Lightning is super dark when Editing Prefab Asset - Unity Forum
Prefab Utility
ドキュメント:
UnityEditor.PrefabUtility | Unity スクリプトリファレンス [公式]
参考:
スクリプトから Prefab を操作する Unity 2018.3 以降 | LIGHT11
スクリプトから Prefab を操作する Unity 2018.2 まで版 | LIGHT11
インスタンスから元の Prefab を取得する | kan のメモ帳
Prefab の状態を保ったままのオブジェクトをプログラムから作成する | kan のメモ帳
ルートに変更された Prefab があるかどうかを調べるエディター拡張 | GIGA CREATION Blog
ヒエラルキー上で隣に複製 & プレハブを維持して複製 | JoyPlot
再生モード中の変更をスクリプトでプレハブに保存/更新する | いんでぃーづ
How to find the prefab root in the prefab editor with an environment? - Unity Forum
How can I get a GameObject root prefab? - Stack Overflow
Prefab Stage Utility
ドキュメント:
Experimental.SceneManagement.PrefabStageUtility | Unity 2020.3 スクリプトリファレンス [公式]
参考:
Prefab モード中にシーンや Prefab の情報を取得する | LIGHT11
Prefab Mode でスクリプトからオブジェクトを選択状態にする | うにてぃブログ
プレハブモードかどうかをエディタ拡張で確認する方法 | コガネブログ
How to find the prefab root in the prefab editor with an environment? - Unity Forum
Missing Script
コード:
Find Missing Scripts | Unify Community Wiki
参考:
プレハブが見つからない (Missing)
現象:
ヒエラルキーウィンドウでゲームオブジェクトが赤く表示され、選択するとインスペクターウィンドウで Missing
と表示される。
原因:
ゲームオブジェクトの元になったプレハブアセットが削除された、もしくは、GUID が変更された。
対処法:
- GUID を手動で紐付けし直す
- 諦めて Unpack Prefab を実行する
- Fix Prefab
参考:
Missing Prefab を再度紐づける方法 - Qiita
Prefab だったゲームオブジェクトの Missing を解除 | クリエイターとっち日記
Missing Prefab かどうか確認する方法 | コガネブログ
プレハブのプレビューが真っ暗になる
URP 用のシェーダーを使用しているプレハブの場合は、レンダリングパイプラインを URP に切り替えてマテリアルを URP 用に変換すると正常に表示される。
参考:
All Asset Previews for Prefabs and Models are fully black - Unity Answers
All prefab previews are completely black - Unity Forum
Prefab preview is dark in the inspector - Unity Answers
Preview Pane Very Dark - Unity Forum
Why are my prefab and model previews not showing? - Unity Forum
まとめ
Prefab を使ったオブジェクト生成/複製/削除等の方法 | XR-Hub
Tips
Improved Prefabs Introduction & FAQ | Unity Forum [Official]
Revert Same Value Override Property
参考: