Unity2018.3のβ版でPrefabのワークフローが色々と変更されました。今回はその中の Prefab Mode, Nested Prefab, Prefab Variant についてまとめてみました。
Prefab Mode
2018.3より前のバージョンでPrefabを編集する時は以下の流れが一般的でした。
- ProjectビューのPrefabをHierarchyビューにドラッグ&ドロップ
- Inspector/Sceneビュー上でPrefabを編集
- InspectorビューからApplyボタンを押して編集内容を保存
- Hierarchyビュー上からPrefabを削除
この流れだと以下の問題が起こりやすかったです。
・Applyボタンを押し忘れてPrefabの保存に失敗
・編集したPrefabの削除を忘れてシーンに残る
Prefab Mode はこういった問題を解決するためのものらしいです。
(Unityの公式ブログに書いてました)
Prefab Mode への移行方法は以下の3パターンがあります。
・Projectビューで対象Prefabをダブルクリック
・ProjectビューでPrefabを選択してInspectorビューの「Open Prefab」をクリック
・Hierarchyビュー上の対象Prefabの右側にある「>」をクリック
上記いずれかを実行すると以下のPrefab編集用の画面に移行します。
保存方法
Sceneビュー上部右端の「Auto Save」のチェックが有効なら編集内容は自動で保存されます。以前のように編集後に「Apply」ボタンを押す手間が無くなりました。
ただし、サイズの大きいPrefabを自動保存が有効な状態で編集すると動作が遅くなる場合があるので、その時は「Auto Save」のチェックを外します。手動で保存する場合は「Auto Save」の隣にある「Save」ボタンを押すか、または 「Ctrl + S」(Mac : Cmd + S) 保存できます。
環境設定
Prefab Modeでは 専用Sceneファイルを設定できます。 Edit > Project Settings > Editor > Prefab Editing Environments で設定できます。
例えば UI Environment にヘッダーとフッターのUIとCanvasを配置した Sceneファイルを設定しておけば、UI関連のPrefabを編集する際にそのSceneが読み込まれた状態で編集できます。これを上手く使えば、UIの編集をする際にヘッダーとフッターUIのPrefabも Hierarchyビューにドラッグ&ドロップして...という手間が省けますね
以下のようにスクリプトからも設定できます。
EditorSettings.prefabRegularEnvironment = customScene; EditorSettings.prefabUIEnvironment = customSceneUI;
2019/6/23 追記
UI Environment に Scene を設定しなかった場合、PrefabMode時に Canvasコンポーネントだけが接続されたオブジェクトがルートに配置されるため、実際のゲームSceneでCanvas Scaler を接続して解像度に応じたUIオブジェクトのスケール処理を行なっている場合、PrefabModeで編集した結果とゲーム画面とでレイアウトが一致しない現象が発生することがあります。この問題は ゲームSceneと同じ Canvas Scaler を設定した Scene を UI Environment に設定すれば回避できます。
終了方法
Prefab Mode を終了するには Hierarchyビューの「<」をクリックするか、Sceneビュー上部の「Scenes」をクリックします。
Nested Prefab
Prefabの中にPrefabを設定できる仕組みです。これの便利なところは例えば下図のようにある Prefab に Particle System が設定された別Prefab が3個配置されている状態から、Prefab Mode で Particle System のカラーを1つ編集するだけで他の2つにもその設定が適用されます。
今までのように個別で設定を行いたい場合は対象Prefabを右クリックして「Unpack Prefab」か「Unpack Prefab Completely」を選択します。2つの違いは選択したPrefabに対してのみ適用されるか、その子階層にあるPrefabにも適用されるかです。
ちなみにNestは「入れ子」という意味です ^_^
Prefab Variant
あるPrefabをベースにして異なるパラメータや、追加のコンポーネントを設定したPrefabを作成したい場合に使います。
作成方法はベースとなるPrefabを右クリック > Create > Prefab Variant で作成できます。
下図のようにPrefabアイコンに矢印が描かれたPrefabが作成されます。今回はパーティクルサイズが異なる Prefab を作ってみるので「PrefabParticle_Large」としておきます。
PrefabParticle_Large の Prefab Mode に移行して Start Size を変更します。ベースと異なる部分があるとInspectorの左端に青いラインが表示されます。
保存方法
Variant Prefabの保存方法は通常Prefabと同様ですが、ベースのPrefabに設定値を適用したい場合はInspectorビューからOverrides > Apply All to Base をクリックするか
Overrides > 変更したコンポーネントを選択して
下図のようにベースとの変更差分を確認しながら
対象パラメータ上で右クリック > Apply to Prefab XXXXX で適用する方法があります。
所感
Prefab Modeでの編集はとても便利で今まで起こっていた操作ミスが減りそうです。Nested Prefab と Prefab Variant はきちんと仕様を把握しておかないと編集した内容が他のSceneやPrefabに影響を及ぼす可能性があるので注意が必要かなぁと思いました。