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 コメント

コメントの配信登録

コメント受付を終了しました。

  1. Hey the Windows download link is not working.

    1. Jacob Herold

      8月 9, 2018 11:50 am

      I just checked https://beta.unity3d.com/download/ff19e2e229d2/public_download.html and had no issues – must have been a short outage – please try again. :)

  2. Brian Acker

    7月 5, 2018 11:00 pm

    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

    1. Kristyna Hougaard

      7月 6, 2018 12:22 pm

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

  3. 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?

  4. Dvdduplicatorrental

    6月 23, 2018 4:37 am

    Mads Nyholm, thanks! And thanks for sharing your great posts every week!

  5. Jérôme Foucher

    6月 22, 2018 6:15 pm

    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)

    1. Could you please ask you question in the forum
      https://forum.unity.com/forums/improved-prefabs.158/

      To me is sounds like what you are trying to do can be achieved with a Variant.

    2. You need to create a Variant of the model first: Right click on your model in the Project Browser and select Create -> Prefab Variant. This will generate a Prefab Variant next to your model. Now use this variant in your scenes to have it automatically update when you change the source model in your DCC while keeping your overrides to the model.

  6. Bardelot Alexandre

    6月 22, 2018 8:18 am

    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.

  7. 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?

    1. There are no changes to how scenes are serialized for players.

  8. 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.

    1. 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.

    2. Yes this a limitation of the new system, and we understand this can be frustrating. Just like model prefabs, normal prefabs are now imported assets so they cannot be edited directly in the Project Browser. See the FAQ for more details: https://forum.unity.com/threads/faq.536647/

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

    1. No these features are unrelated

  10. Mahdi Jeddi

    6月 20, 2018 4:38 pm

    What about UI prefabs? does the prefab mode put them on a temp canvas?

    1. Whoah, that’s a really nice question. I hope it does.

    2. Yes we use a default Canvas for UI Prefabs. You can also specify your own UI Environment Scene for UI Prefabs by creating a Scene with your own Canvas and assign this in the Editor Settings (Look for ‘UI Environment’ under ’‘Prefab Editing Environments’)

  11. Stepan Stulov

    6月 20, 2018 2:03 pm

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

    1. Mads Nyholm

      6月 20, 2018 3:13 pm

      Yes; Prefabs can contain other Prefab instances. I recommend to watch the video above to get a good overview of the new features (if you haven’t already).

  12. Really nice workflow :)