24
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity Nested Prefabを使ってみる

Last updated at Posted at 2018-12-15

新しいPrefabのワークフロー

Unity 2018.3がリリースされました
このリリースの目玉機能であるNested Prefabを使ってみます
https://unity.com/prefabs

Nested Prefabとは?

これまでのPrefabは、Prefabの子に別のPrefabを保存することはできませんでした。
Prefabの子に別のPrefabを入れてしまうと、子のPrefabを更新してもその情報が統合されたPrefabの方には反映されないという仕様でした。
無題のプレゼンテーション (1).jpg
これを解決するために親のPrefabから子のPrefabをInstantiateしたり、Asset StoreにあるNested Prefabなどのアセットを使っていたのではないでしょうか。

これからはUnityが提供してくれたNested Prefabによって、Prefabの中に別のPrefabを保存しておいて取り回しのしやすい運用が行えます。
無題のプレゼンテーション (2).jpg

使ってみる

Unity2018.3からPrefab周りのUIが変わっているので、そのことも織り交ぜながら説明していきます。

まずPrefabAとPrefabBを作成します。
わかりやすくするため、PrefabAの子にCubeを、PrefabBの子にSphereを作成しておきます。
image.png
2018.3からはPrefabのRootのGameObjectのみ青くなり、それ以外は白いアイコンで表示されるようになったようです。

Prefabの新しい編集画面

次にPrefabAにPrefabBを子づけします。
2018.3よりPrefabを編集する場合は専用の画面が表示されるようになりました。
(これまではNew Sceneを作成してからPrefabをD&Dしてを編集していた人が多いのではないでしょうか。。。)

Hierarchy上のPrefabを編集するには、右の「>」を
image.png
Project内のPrefabを編集する場合は、OpenPrefabを選択します。
image.png

するとScene ViewとHierarchyにはそのPrefabだけ表示されるようになります。
image.png

PrefabAにPrefabBをドラッグ&ドロップして子づけします。
わかりやすくするためPrefabBの位置を少しずらしておきます。
image.png

元の画面に戻るには左上の「<」を選択します。
image.png

Prefabを保存する

Prefabを作っていざApplyしようとしてもボタンがありません。
ここは2018.3からUIが変わっています。
まずOverridesを選択してから「Apply All」を選択するとPrefabが保存されます。
image.png

image.png

現状はこのような見た目になっています。
image.png

個別のPrefabを更新する

さて本題です。子づけしたPrefabBを更新した場合どうなるでしょう。

PrefabBに子づけしてあったSphereをCylinderに変更します。
image.png

この状態でPrefabAを見てみると
image.png
なんとPrefabBの更新情報が適用されています!

このようにNested Prefabを使えばPrefabを部分ごとに作っておいて、随時更新するという作業がやりやすくなります。

Tips

シーン保存

Prefabを特定のシーンでは別の状態で保存したい場合もあると思います
その場合、どのパラメータを編集したかがこれまでよりわかりやすくなりました。
オブジェクトを追加した場合「+」が表示される
image.png

Inspector上のパラメータを編集した場合、編集した部分が太字になり
左側に青いラインが表示される。
image.png

Unpack Prefab

シーン上でPrefab内のオブジェクトを削除しようとすると以下の表示が出ます。
image.png

Cannot restructure Prefab instance
Children of a Prefab instance cannot be deleted or moved, 
and components cannot be reordered.

You can open the Prefab in Prefab Mode to restructure the Prefab Asset itself, 
or unpack the Prefab instance to remove its Prefab connection.

シーン上でオブジェクトを削除する場合、Prefab自体を変更するかunpackしてリンクを切れと言ってきます。
unpackとは従来のbreak prefab instanceに当たる操作になります。

Prefabを右クリックしてメニューを出すと2種類
「Unpack Prefab」
「Unpack Prefab Completely」
があります。
image.png

挙動がどのように違うのかというと

初期状態
image.png

Unpack Prefab
image.png
自分自身のリンクは切り、NestedしていたPrefabのリンクは生きています。

Unpack Prefab Completely
image.png
こちらは完全にリンクを切ってしまいます。
こちらはシーン上で自由に編集ができるようになります。

まとめ

誰もがずっと待ち望んでいたNested Prefabですが
Prefabそのもののワークフローが変わり、開発がとてもスムーズになりそうな予感がします。

24
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?