読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU
{スポンサーリンク}

Unity Asset : プレハブを入れ子にできる Prefab Evolution

Unity AssetStore

Unityではプレハブを入れ子構造にできません。

たとえばプレハブを二つ作成して以下のようにシーンに配置します。

f:id:sugar_affordance:20160522124026p:plain

このとき、Prefab1にたいしての変更をApplyすると、以後Prefab2を変更してもアセットに反映されなくなってしまいます。


*7/22現在 Unityで対応する予定がありそうでs。

開発進行中、スプラッシュスクリーンツール – Unity Blog

Q. いい機能ですね。ところでプレハブのネスト化はどうしてできないのですか?
 A. 真面目な話、社内の別のチームが、プレハブのネスト化に向け取り組んでいます。すでにプレハブのネスト化に必要なことを達成する方法は把握できており、今までアセットバンドルの改良作業に取り組んでいたコアチームが、この機能の開発にとりかかっています。

それを解決するのがPrefab Evolution です。

https://www.assetstore.unity3d.com/jp/#!/content/17557

アセットをインポートするだけで準備は完了です。

使い方

Prefabをネスト可能にする

アセットをインスペクタで見ると、”Allow this prefabs to be nested”というボタンが追加されています。
このボタンを押すと”Evolve Prefab”というスクリプトがアセットに追加され、ネスト(入れ子)が可能になります。

f:id:sugar_affordance:20160522124028p:plain

ネスト可能なオブジェクトには、ヒエラルキービューで緑のキューブマークがつきます。

f:id:sugar_affordance:20160522124032p:plain

Prefabをネストして保存する

Prefab1の中にPrefab2をネストし、Prefab1のApplyボタンを押してみます。

f:id:sugar_affordance:20160522124030p:plain

Prefab2のキューブマークが黄色になりました。
ネスト可能プレハブを別プレハブにネストして保存すると、黄色のマークになります。

プロジェクトビューでは以下のように保存されます。

f:id:sugar_affordance:20160522124034p:plain

ネストプレハブを更新する

この状態でPrefab2を更新する際には少しコツが要ります。

残念ながら、ネストプレハブ(黄色のキューブ)を更新しても、元のプレハブには変更が適用されません
前図で言うと、Prefab1内のPrefab2を更新してApplyしても、Prefab2の元プレハブはなにも変わりません。
Prefab2を更新したい場合、以下の二つの方法があります。

Prefab2をプロジェクトビューで選択し、インスペクタで直接変更する

Prefab2をシーンに追加し、変更してApplyボタンを押す

継承関係のプレハブを作る

PrefabEvolutionには、もう一つ、"継承関係のプレハブを作る"という面白い機能があります。

これはオブジェクト指向プログラミングの継承と似た概念で、継承元(親プレハブ)の変更を継承先(子プレハブ)すべてに適用できたり、逆に子プレハブのみを変更させることができます。

子プレハブを作る場合、インスペクタビューのMenuボタンからCreate Childをクリック。

f:id:sugar_affordance:20160522124037p:plain

もちろん、親プレハブは”Allow this prefabs to be nested”を押してネスト可能にしておく必要があります。

 ステージを作るときに便利

例えば街を作るとき。
街ごとプレハブにしたいけど、同じビルを使いまわしたい。変更したら全てに適用したい。
という場合などに便利です。

ネストプレハブはいつかUnityで対応するんじゃないかとずっと思ってるんですがしないですね。
かゆいところに孫の手という感じのアセットです。

やっかいなバグあり(バージョン 1.3.9.7で修正済み)

一つだけ注意。 シーンを保存するごとに全プレハブのmetaファイルのtimeCreatedが更新されてしまうというバグがあります。
Gitなどでソースを管理していると毎回全metaファイルが更新されてしまい面倒なことになります。
フォーラムのこちらの修正を適用しましょう。

バージョン 1.3.9.7で修正済みです

forum.unity3d.com

Amazon.co.jpアソシエイト