Search Unity

Unity への追加機能として最も要望の多いのが、プレハブをネストする(入れ子構造にする)機能です。しかしプレハブワークフローについては、それ以外の様々な面においても改善を望まれるユーザーの方が多くいらっしゃることを理解していました。そこで Unity では、再利用性・制御のしやすさ・安全性に重点を置いて、システム全体の改良を行っています。本記事は、今後予定されている変更事項についてご紹介するブログシリーズの第一弾としてお届けします。Unite Berlin での基調講演に参加された方の中には、新しいプレハブシステムの搭載されたプレビュー版 Unity ビルドを使ってみた方も多いと思いますが、まだの方はこちらからダウンロードしてください。.

まずは、Unity におけるプレハブとは何か、その基礎を再確認してみましょう。簡単に言うとプレハブアセットとは、特定のゲームオブジェクトとその子の、テンプレートのようなものです。プレハブアセットのインスタンスを使用して、特定のゲームオブジェクトの複製をシーン全体に多数作成することができます。あるプレハブアセットに変更が加えられると、そのプレハブのすべてのインスタンスがそれに応じて自動的に更新されます。

私達は、様々なインディーゲーム・AAA ゲームの開発スタジオの方々と話をしながら、現在皆様がプレハブをどのように使用しているか詳細にリサーチしました。そこで明らかになった問題のひとつは、プレハブアセットを編集したい時、シーンを開いてヒエラルキービューにドラッグして編集し変更を適用した後、確実にそれを削除しなければならないということでした。そしてもうひとつの大きな問題は、インスペクターのプレハブインスタンス用の Apply(適用)ボタンです。プレハブへの編集の状態がよくわかっていないのに Apply ボタンを押して、プレハブアセットに間違って変更を適用してしまうことがあるということでした。

これらの問題を解決するために、いくつかの新しい機能を追加しました。ネスティングと継承に対応した、後方互換性のあるプレハブバックエンドを実装しました。プレハブインスタンスのプロパティとオブジェクトオーバライドの視覚表示を改善し、異なるレベル(プロパティ毎、コンポーネントあるいはゲームオブジェクト毎、または以前と同様にプレハブインスタンス全体)でのオーバライドの適用が可能になりました。これに加え、Prefab モードの追加によって、プレハブアセットを切り離して編集できるようになりました。

Prefab モード

Prefab モードによって、プレハブに関わる作業が抜本的に変わります。変更をプレハブインスタンスに加えるか、プレハブアセットに直接加えるかが選択可能になりました。

Prefab モードではプレハブアセットの編集操作がよりスムーズになります。構造的な修正も含め、どんな修正をプレハブアセットに加える場合でも、プレハブへのリンクの切断についてたずねるダイアログが表示されなくなりました。Prefab モードを使用すると、後にアセットに適用するためだけにプレハブインスタンスに一時的な変更を加える必要がなくなります。(ただし、オーバーライドとして維持されるべきはずの、その他の以前のオーバーライドが間違って適用されてしまうリスクはあります。)したがって、Prefab モードはプレハブアセットの変更に使用し、プレハブインスタンスのオーバーライドは必要な場合にのみ行うことをお奨めします。また、Apply ボタンでクリックしていくワークフローに関しても、大幅に改善されました。これについては後のブログ記事で詳細をお伝えします!

Prefab モードは、これまでプレハブの編集のために使っていたヒエラルキーとシーンを置き換え、プレハブアセットを分離して表示する場を提供します。ヒエラルキーおよびシーンビューにこのモードの新しいヘッダーが表示されます。また、Prefab モードの背景色は Preferences メニューでカスタマイズ可能です。

画像の赤丸部分の矢印をクリックして(あるいは他の方法で)シーンから Prefab モードに入ると、ヒエラルキービューに Prefab ヘッダーが表示され、シーンビューにパンくずリストのヘッダー(画像内の四角い赤枠部分)が表示されます。

Prefab モードには、以下のいずれかの方法で入れます。

  • プロジェクトウィンドウ内でプレハブをダブルクリックする
  • ヒエラルキーウィンドウで、プレハブインスタンスのルートゲームオブジェクトの隣に新しく表示される、矢印ボタンをクリックする
  • インスペクター内で、プレハブアセットまたはプレハブインスタンスのルートゲームオブジェクトの Open ボタンをクリックする

プレハブアセットの扱い

プレハブをネストできるようにするためには、プレハブのバックエンドに技術的な変更を加える必要がありました。このため、プレハブは実質的に、インポートされるアセットとなりました。つまり、プロジェクトウィンドウ内でのプレハブのゲームオブジェクトの編集はできなくなりました。プロジェクトウィンドウ内で直接編集を行う旧ワークフローとは異なり、Prefab モードでは、どの階層のオブジェクトでも編集でき、行っている作業をシーンビューで確認することもできます。

プレハブインスタンスの扱い

プレハブのネスト機能を提供したことによるもうひとつの影響は、プレハブインスタンスの接続を切断してそのインスタンスに構造的な変更を加えることができなくなったことです。例えばゲームオブジェクトの削除、ゲームオブジェクトの親子関係の変更、Transform の RectTransform による置き換えまたはその逆などです。これらは Prefab モードですべて行うことができます。または、プレハブインスタンスのプレハブアセットへのリンクを完全に削除して単純なゲームオブジェクトにしてから再構築したい場合には、そのプレハブインスタンスを取り除くことも可能になっています。

Prefab ステージ

エディターに「ステージ」という用語が加わりました。これは、他のゲームオブジェクトから分離された一式のゲームオブジェクトを表す概念です。Prefab モード中にはシーンビューの上部にパンくずリストが表示されますが、そのひとつひとつが異なるステージを表します。各ステージは独立した「世界」のようなものです。初期設定では、Main ステージがあります。ここにはすべてのシーン(読み込み済みでヒエラルキー内に表示されているシーン)が含まれています。Prefab モードでプレハブを開くと、そのプレハブのコンテンツ用に Prefab ステージが作成されます。Prefab ステージが開かれた時に、Main ステージのゲームオブジェクトはアンロードされません。つまり、引き続きゲームビュー内に表示されたままになります。

シーンビューとヒエラルキービューには常に現在のステージが表示されます。一番右側のパンくずリストがこれを表します。シーンの含まれた Main ステージに戻るには、シーンビューのパンくずリスト内の「Scenes」ボタンか、ヒエラルキービューの矢印の「戻る」ボタンをクリックしてください。

以下の動画で、新しいワークフローが実際に機能する様子をご覧ください。

新しいプレハブ機能をお試しになりたい方は、プレビュー版ビルドをプレハブページからダウンロードしてください。また、改良版プレハブに関する専用フォーラムでも、詳しい情報や質問・フィードバックをご覧いただけます。

改良されたプレハブワークフローについてのその他の要素に関する詳細は、今後のブログにてお届け予定です。どうぞお楽しみに!

Unite Berlin での改良版プレハブに関する講演

改良されたプレハブワークフローを実際にご覧になりたい方は、Unite Berlin 講演のライブストリームの YouTube アーカイブをぜひご覧ください。Ciro Continisio による講演「Improved Prefab Workflow」、および Rune Skovbo Jacobsen と Steen Lund による講演「Technical Deep Dive into the New Prefab System」にて、今回の実装に関するメリット・デメリットが紹介されています。
(訳注:上記のリンクから Unite Berlin Day 2 ライブストリーム YouTube アーカイブ動画の該当講演が始まる位置に直接ジャンプできます。リンクを開いて 30 秒ほどで講演が始まります。)

23 replies on “新しいプレハブワークフローのご紹介”

What beta release of 2018.2 will include prefab workflows? if any? I have been using the preview build to play with prefabs, but I dont see shadergraph in package manager.. I’m really excited to get a build with all the new features! going to be amazing!!

thank you so much!
Brian Acker

Improved prefab workflows are currently slated for 2018.3. What’s available now is a custom preview build.

This is so amazing, like my heart goes out to all the people that made this possible!! By the way, I know the preview build is out, but do we know yet what the first Unity version will have this built-in?

Great Feature and implementation !
But… When adding an object in the hierarchy of an FBX file, prefab already created with this fbx doesn’t automaticly updated. Need to break and make the prefab again as before. FBX should be prefab too from start
(just tried with the preview release)

Finally !!!

This is the strict minimum of what we needed for prefabs, but that is cool that you did it. I hope that everything will work without any issues.

If I instantiate the same prefab multiple times in the scene, how is the serialization? Right now same prefabs take a lot of storage in the scene. Will that also be improved?

We can no longer edit prefabs from the project view, by design. This seems like a serious regression because now we can no longer multi select prefabs and change a value.

Now you don’t need to select multiple prefabs and change their value: you can change the value of prefab variant (just once).

But I think that you still have an option to do that in scene like you said.

Are there any changes to the serialization system with this update? Will it be possible to have polymorphic serialization?

Hey, Unity, great job! Just to be clear, can prefab contain other prefab instances as children? Thanks

Comments are closed.