こんにちは。黒星ゆうです。
みなさまはPrefab Variantというものをご存知でしょうか。
このコ、使えるとかな~り便利なものなのですが、お使いになられている方の話を多くは聞かないので、解説記事を書いてみます。
Prefab Variantを活用して、あんしんあんぜんな改変ライフを過ごしましょう。まじべんりです。らぶ。
Prefab Variantについて
そもそもPrefab Variantとは何なのか。
本当はUnityのドキュメントを見るのが一番かとは思いますが、文字が多くてよくわからない! となり得るので、実例を用いながら解説いたします。
(Unityのドキュメントは以下)
Prefab Variantとは、端的に言えば「色違い」です。
ここに2人のミルクちゃんがいます。
元のミルクちゃんをA、いろいろ変えたあとのミルクちゃんをBとします。
このBのミルクちゃんをProjectにドラッグ&ドロップします。
そうすると「Create Prefab or Variant?」というダイアログが表示されるので、「Prefab Variant」を選択します。
こうすることで、「B Variant」という名前のファイルがProjectに生成されます。
これがPrefab Variantです。
このB Variantは、「Aの目の色・衣装を変えたもの」として保存されています。
(AのPrefabはどこにあるの? という話ですが、「Milk-Re」というPrefabの名前を便宜上「A」に変更しただけですので、B Variantの元のPrefabは正確には「Milk-Re」となります。逆に分かりづらくなっちゃったかもしれない……)
なので、B VariantをHierarchyに置くと、先程の変更を加えたミルクちゃんがそのまま追加されます。もりもり置けます。
これだけならば、「ミルクちゃんのPrefabをUnpackして、改変したものをPrefabにするのと何が違うの?」という話になります。
PrefabとPrefab Variantの違いとして、「Prefab Variantに加えた変更を、元となったPrefabの状態にまで戻すことができる」特徴があります。
BのPrefab Variantを選択すると、「Open」というボタンがあります。
こちらを選択すると、B Variantの中身を編集できます。
ここで「Overrides」を選択すると、「BのPrefab Variantで、AのPrefabから変更した内容」の一覧を確認することができます。
(ぱっと見全然変更が加わってないように見える項目も表示されたりしますが、そこは適宜ご確認いただきたく)
たとえば今回は目の色を変えたので、BodyのSkinned Mesh Rendererが表示されています。衣装も変えたのでそれに関するオブジェクトも一覧に表示されています。
ここでRevert Allを選択すると、B Variantで変更した内容をAの状態まで戻すことができます。
個別にRevertすることも可能ですので、「目の色だけ戻したい!」と思ったら、BodyのSkinned Mesh Rendererを選択してRevertすればよいわけです。
この機能は改変を失敗してしまったときにとても助かります。うっかり髪の毛を消した状態で保存しちゃった! となっても、「髪の毛を消す変更」をRevertすれば元通りです。
ちなみに先ほどB Variantを複数配置しましたが、中身はすべて同じB Variantなので、ここでRevert Allを選択するとすべてのB VariantがAの状態に戻ります。
次はこのような特徴のあるPrefab Variantを、改変でどう活用するかの話をします。
改変での活用方法
1. ベースとなるPrefab Variantを用意する
まずはいろいろといじくるための、土台となるPrefab Variantをつくります。
そのためにアバターのPrefabをHierarchyに配置します。今回はミルクちゃんで実践します。
必要があればPrefabの名前を変更して、先ほどと同様Projectにドラッグ&ドロップし、Prefab Variantを作成します(ぼくはよく「Base」とか名前につけてます)。
アバターの髪型を変えたりアクセサリーを付けたりは、この「Base」を編集して行います。
2. Prefab Variantを編集して、Applyする
「Base」の中身を思い思いに改変しちゃいましょう。今回はためしに目の色を変えて、獣耳を消しちゃいます。
Avatar OptimizerのAAO Trace and Optimizeなど、すべてのアバターで用いる類のツールやギミックもこの「Base」に入れ込むと良いでしょう。
(Trace and Optimizeの話はこちらでも解説しています)
改変を済ませたならば、OverridesからApply Allを選択します(変更内容が正しいかは確認してくださいね!)。
こうすることで、Baseの変更内容がきっちり保存されます。
3. ベースから新しくPrefab Variantを作成する
「Base」の改変を終えたら、今度は「Base」を親とするPrefab Variantを作成します。
「Base」を複製し、名前を変更してまたProjectにドラッグ&ドロップします。
今回は名前を「_Milk」として、Prefab Variantを作成しました。
この「_Milk」は「Base」が親になっています。そのことは、ProjectのPrefab Variantを選択してInspectorをチェックすることで確認できます。
「Base」が親になっているので、「Base」の変更を保存すると「_Milk」に反映されます。
つまり、「Base」でアクセサリーを追加したり、位置を動かしたりすれば、すべての「_Milk」に反映させることができます。
たとえば今「_Milk」には獣耳が生えていませんが、やっぱり生やしたいなあと思ったとします。
「Base」側で獣耳のオブジェクトをアクティブにしてApplyします。
すると……
「_Milk」にも獣耳が生えましたね。かわいいね。
このように、あとからすべてのアバターに同じアクセサリーを追加したいとか、大々的な変更を加えたくなったとき、この性質がとても役立つわけです。
更に、そういった大々的な変更をカンタンにできることから、1アバター1衣装の実現もやりやすくなります。
実際にぼくはこの「_Milk」のようなPrefab Variantを使って、衣装ごとにアバターを作成しています。
以下の画像、「ぽっぴんぎふと」以下のものはすべて「_ChiffonGothTwin」というPrefab Variantをもとに作成したものです。それぞれ別々の衣装を入れていますが、「Chiffon_Setting」で加えた変更がすべてに反映されるようになっています。
要するに! アバターの軽量化も捗って改変もしやすく、更に失敗してもリカバーが効きやすいってわけです!
QOLあげあげだ!!!!
まとめ
今回はPrefab Variantの活用方法について紹介いたしました。
分かりづらい解説かもしれませんが……もしそうであれば、この機会にPrefab Variantについて調べて頂き、改変ライフに活用していただければと思います。
それくらい便利なので!!