プレハブ
コンポーネント、プロパティー、子ゲームオブジェクトを持った一つのゲームオブジェクトを再利用可能なアセット「プレハブ」 (Prefab) として作成・保存することができる。プレハブをインスタンス化してシーンに配置した場合、元のプレハブアセットに加えた編集は全てのプレハブインスタンスに反映される。プレハブインスタンスの一部の設定を変更したい場合は「オーバーライド」を使用することができる。一連のオーバーライドを継承するプレハブバリアントを作成することができる。
公式サイト:
目次
- 1 使い方
- 2 概要
- 3 入門
- 4 プレハブモード
- 5 Nested Prefab
- 6 Unpack
- 7 プレハブバリアント
- 8 インスタンスオーバーライド
- 9 プレハブを作成する
- 10 プレハブを編集する
- 11 FBX の扱い
- 12 プレハブで置き換える
- 13 スクリプトで置き換える
- 14 モデルの差し替え
- 15 スクリプトでランタイムにインスタンスを作成する (Instantiate)
- 16 スクリプトで操作する
- 17 インスタンスを破壊する (Destroy)
- 18 ガベージコレクション (GC)
- 19 Prefab Editing Environments
- 20 Prefab Utility
- 21 Prefab Stage Utility
- 22 Missing Script
- 23 プレハブが見つからない (Missing)
- 24 プレハブのプレビューが真っ暗になる
- 25 Tips
使い方
参考:
Unity 2018.3 以降における Prefab の使い方をちゃんと理解する | LIGHT11
概要
参考:
新しい Prefab システム | kurihara-n の日記
2分で理解!Unity のプレハブ (Prefab) とは?使い方までご紹介 | Unishar
Unity 2018.3 の Prefab ワークフローの実用について考える | てっくぼっと!
Unity の新しい Prefab ワークフローについて考えてみた – Qiita
新しいプレハブワークフローのご紹介 | Unity Technologies Blog
ココが変わる!Unity の新しいエディタワークフロー | Unity Technologies Blog
入門
参考:
2018.3 以降のプレハブの基本操作 | Unity Connect
プレハブモード
参考:
プレハブモードでのプレハブの編集 | Unity マニュアル [公式]
Nested Prefab
参考:
Unpack
アンパック (Unpack) を実行するとプレハブインスタンスの内容を個別のゲームオブジェクトに展開する。
- Unpack Prefab:入れ子になったプレハブはプレハブの状態を維持したままで、プレハブの1階層目のみ展開される。
- Unpack Prefab Completely:入れ子になったプレハブも全て個別のゲームオブジェクトに展開される。
参考:
Hierarchy にある GameObject の Prefab を解除する方法 | はなちるのマイノート
プレハブインスタンスの展開 | Unity マニュアル [公式]
プレハブバリアント
プレハブバリアントを作成するには、Project ウィンドウのプレハブを右クリックして「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 内のオブジェクト名や階層構造を変更すると、それらのオブジェクトに紐づいていたプレハブバリアントを編集して適用したオーバーライドの情報は消えてしまう。
参考:
Unity 2018.3 以降で FBX を Prefab 化して正しく取り扱う | LIGHT11
FBX 更新後に Prefab を再作成すべきか? – Qiita
FBX からの Prefab 生成・更新を自動化する | LIGHT11
Working with Prefabs | Unity FBX Exporter 2.0 Manual [Official]
プレハブで置き換える
Project ウィンドウのプレハブを Alt
キーを押しながらドラッグして Hierarchy ウィンドウのゲームオブジェクトにドロップすれば、対象のゲームオブジェクトをプレハブに置き換えることができる。
参考:
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
モデルの差し替え
参考:
Prefab のモデルの差し替えを、セットしたコンポーネントを一々付け直さずに行う方法 | テラシュールブログ
キャラクターモデルを差し替える時にコンポーネントの付け替えを自動化したい話 | soy-software
Mesh Renderer | Unity マニュアル [公式]
Skinned Mesh Renderer | Unity マニュアル [公式]
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)
参考:
スクリプトから Prefab のインスタンスを作る方法 – Qiita
Prefab と Instantiate の基本 – Qiita
ランタイムのプレハブのインスタンス化 | Unity マニュアル [公式]
Object.Instantiate | Unity スクリプトリファレンス [公式]
スクリプトで操作する
参考:
スクリプトから Prefab を操作する (Unity 2018.3 以降) | LIGHT11
インスタンスを破壊する (Destroy)
プレハブインスタンスを破壊するには Destroy
メソッドを使う。
obj = Instantiate(buildingPrefab); Destroy(obj);
参考:
Object.Destroy | Unity スクリプトリファレンス [公式]
ゲームオブジェクトの作成および削除 | Unity マニュアル [公式]
How to destroy an instantiated prefab in C#? - Unity Answers
Destroy instantiated object instead of prefab - Unity Answers
ガベージコレクション (GC)
参考:
Unity コンポーネントが Destroy されても、オブジェクトが GC で回収されないかもしれない話 - Qiita
Prefab Editing Environments
プレハブ編集の際に使用するシーンを設定する。
- Regular Environment
- UI Environment
参考:
Unity 2018.3 からの Prefab ワークフロー | ゴイサギ日記
新たな Prefab ワークフローで Prefab の RootCanvas の RectTransform が崩れる問題の対策 - Qiita
Editing Environment | Unity マニュアル [公式]
Lightning is super dark when Editing Prefab Asset - Unity Forum
Prefab Utility
参考:
スクリプトから Prefab を操作する | LIGHT11
ルートに変更された Prefab があるかどうかを調べるエディター拡張 | GIGA CREATION Blog
UnityEditor.PrefabUtility | Unity スクリプトリファレンス [公式]
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
参考:
Prefab モード中にシーンや Prefab の情報を取得する | LIGHT11
Prefab Mode でスクリプトからオブジェクトを選択状態にする | うにてぃブログ
プレハブモードかどうかをエディタ拡張で確認する方法 | コガネブログ
Experimental.SceneManagement.PrefabStageUtility | Unity スクリプトリファレンス [公式]
How to find the prefab root in the prefab editor with an environment? - Unity Forum
Missing Script
参考:
Find Missing Scripts | Unify Community Wiki (archive)
プレハブが見つからない (Missing)
現象:
ヒエラルキーウィンドウでゲームオブジェクトが赤く表示され、選択するとインスペクターウィンドウで Missing と表示される。
原因:
ゲームオブジェクトの元になったプレハブアセットが削除された、もしくは、GUID が変更された。
対処法:
- GUID を手動で紐付けし直す
- 諦めて Unpack Prefab を実行する
- FixPrefab
参考:
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
Tips
参考:
Improved Prefabs Introduction & FAQ | Unity Forum [Official]