見出し画像

【Unity】Prefabを理解する【今更】

Unity歴3年くらいになりますが、Prefab(プレハブ)のことをしっかり理解しているのかと言われると、全くそんなことはなく、Prefab Variants(プレハブバリアント)なんか全く理解していませんでした。
なので、少し違うオブジェクトを作りたいときは、普通にPrefabを解除したりしていました。
Prefabは解除すると、もう元には戻せないので、編集に手間がかかります。こういうことがないように、参考記事を読んで勉強しました。

1.Prefab(プレハブ)とは

Prefabのことが書いてないUnityテキストは流石にないと思います。簡単に言えば再利用できるオブジェクトです。
下の記事がとても分かりやすいです。

高さ5mの桜の木のオブジェクトをプレハブにします。その後、様々な場所にプレハブインスタンスの桜を配置した後に、プレハブモードで桜の高さを3mに修正すると、全てのプレハブインスタンスの桜の高さが3mになります。
ただし、プレハブインスタンスの桜のうち1本だけ個別に高さを6mにオーバーライドしていた場合は、その高さは上書きされません。

2.Prefab Variants(プレハブバリアント)とは

Prefab Variants(プレハブバリアント)については、記載してないテキストもあるかもしれません。以下の記事が大変参考になります。

簡単にいうと、孫プレハブ?のようなものです。
プレハブバリアントにはプレハブでの変更が反映されますが、プレハブバリアントの変更は、プレハブには反映されません(オーバーライドは可)。

桜のプレハブから、花のグラフィックだけ違うソメイヨシノのプレハブバリアントを作ります。
桜の高さを変えると、ソメイヨシノの高さも変わりますが、ソメイヨシノの高さを変えても、桜の高さは変わりません。

仮に桜のプレハブとソメイヨシノのプレハブを別々に作ったとすると、桜のプレハブに変更があった場合、同じ作業をソメイヨシノのプレハブでも行う必要があります。
これがエドヒガン、ヤマザクラと桜の種類が増えていくと、作業効率の差が歴然となります。

3.Nested Prefabs(ネステッドプレハブ)とは

プレハブの中にプレハブが入っている状態です。
プレハブAの中にプレハブBが入っている状態で、プレハブBを変更しても、プレハブAの中のプレハブBには変更が自動的に反映されません(Revert AllでプレハブBの変更が反映される)。

4.Revert AllとApply All

インスタンスに加えた変更をプレハブに上書きしたいときは、そのインスタンスのInspector上部の「Overrides」をクリックして「Apply All」をクリックします。
インスタンスに加えた変更を破棄して、プレハブ通りのゲームオブジェクトに戻すときは「Revert All」です。

その他参考記事


この記事が気に入ったらサポートをしてみませんか?