TutorialUnity2018.3以降でPrefabを使う方法です。Unity2018.3からPrefabワークフローが刷新されたことに伴ってまとめた内容となりますが、Unity2018.2以前を使ったことがない方にもわかるように書いています。Variant)Prefabとの紐づけを解除する(Unpack)参考この記事はUnity2018.3.1f1を使って書いています。Prefabとは?PrefabとはGameObjectをテンプレートとして使う仕組みです。いまモデルやスクリプトを色々使って敵キャラクターを作ったとします。これを元にしたPrefabを作ります。すると、このPrefabをテンプレートとして敵キャラを複製できます。これをPrefabをインスタンス化するといいます。Prefabはテンプレートなのでいくらでもインスタンス化して敵キャラを複製できます。概要としてはこんな感じの機能です。Prefabを作る・インスタンス化するPrefabはHierarchyのGameObjectをProjectビューにドラッグ&ドロップするだけで作れます。アイコンが青くなればPrefab化できています。このPrefabをHierarchyにドラッグ&ドロップすればインスタンス化できます。(ちょっと位置をずらしました)Prefabに変更を加えるとこれらのインスタンスも変わります(やり方は後述します)。下記の項目インスタンスごとに上書き(オーバーライド)することもできます。子GameObjectの追加オーバーライドするにはインスタンスのInspectorから普通に編集するだけです。前節のインスタンスのうち、片方のスケールだけオーバーライドして2倍にしてみます。値をオーバーライドすると上図のように左側に青い線がつきます。これがオーバーライドされている目印です。オーバーライドしたものは元のPrefabの変更が反映されません。ここまでの状態で元のPrefabのScale.yを2.5倍にしてみます。オーバーライドした方には変更が反映されません。このようにオーバーライドしすぎるとPrefabにしてテンプレート化している意味がなくなってくるので、オーバーライドは最小限に抑えるのがUnity的におすすめとのことです。ちなみに、コンポーネントの追加や削除をオーバーライドして行うと次のように表示されます。GameObjectをオーバーライドで追加するとこのように+ボタンが表示されます。インスタンスで上書きできないものインスタンスオーバーライドできないものもあります。階層構造はインスタンスで変更できません。しようとするとインスタンスではなくPrefabを編集するように言われます。GameObjectの削除もできません(追加は前節の通りできます)。PrefabにあるGameObjectをどうしても削除したい場合、非表示にすることはできます。位置や回転など配置に関するプロパティはオーバーライドされません。RectTransformの場合はこれに加えて幅、高さ、マージン、アンカー、ピボットがインスタンスごとに固有です。HierarchyからPrefabを編集する(Overridesドロップダウンを使わない方法)次に、一度作ったPrefabを編集することを考えます。一つ目の方法はHierarchyで編集した内容をPrefabに反映する方法です。適当にインスタンスのScaleを変えて(オーバーライドして)みます。Prefabという項目が出てきます。Prefabのプロパティの値がこの値に書き換えられます。ちなみにRevertはインスタンスでオーバーライドした値をPrefabの値に戻します。Prefabを選択します。Menuから反映できます。Prefabで反映します。Revert操作はインスタンスのRootのGameObjectのInspectorからOverridesドロップダウンを開くことでも行えます。開くとこんな感じのメニューが出てきて、変更を加えたものの一覧が出てきます。これらを選択すると変更前と変更後の状態を比較することができます。Revertができます。PrefabモードでPrefabを編集する前節のように、PrefabはHierarchyから変更をすることができますが、Prefabモードを使えばPrefabを直接編集することもできます。Prefabモードに入るには以下のいずれかの操作を行います。PrefabをクリックするするとSceneビューに次のような画面が開かれてPrefabを編集できるようになります。変更内容は右上のAutoSaveにチェックが入っていれば自動的に保存されます。Prefabが大きいとかでAutoSaveの処理が重くなって作業効率が悪いときにはこのチェックを外します。チェックを外すとSaveボタンが現れるので、これを使って手動で保存します。編集が終わったらSceneビュー上部のパンくずリストかHierarchy上部の矢印から元のSceneに戻れます。ちなみにPrefabモードの環境(Scene)は下記の手順で変えることができます。Prefab)Prefabは入れ子にできます。やり方としては、Prefabモードで普通に他のPrefabをドラッグ&ドロップするだけです。インスタンス同士を入れ子にしてからApplyしても元のPrefab同士が入れ子になります。複雑なのが、入れ子にしたときに子Prefabのプロパティを編集する場合です。これは、親Prefabで子Prefabのプロパティをオーバーライドしている状態です。子Prefabには変更が加わっていません。これをもし子Prefabにも反映させたい場合はApplyする必要があります。子Prefabのプロパティをオーバーライドするのはかなり管理が煩雑になりそうですね...。Variant)Prefabバリアントという機能を使うとあるPrefabのプロパティだけを変えたPrefabを作れます。具体的には大きさ違いのキャラとか色違いのキャラとかが作れます。わかりづらいので試しにやってみましょう。Sphereを作ってPrefab化しておきます。このPrefabのインスタンスをProjectビューにドラッグ&ドロップします。Variantを選択します。Variantが生成されます。Variantからでも生成できます。それではバリアントを編集します。編集方法は普通のPrefabと変わりません。今回はMeshを変更してみました。これでMeshだけが異なるPrefabの変異体が生成できました。ちなみにバリアントに加えた変更を元のPrefabに反映したい場合にはインスタンスの変更の反映と同じように反映すればOKです。Prefabとの紐づけを解除する(Unpack)PrefabのインスタンスとPrefabとのつながりを解除するにはUnpackを行います。Prefabを選択します。するとこれはPrefabのインスタンスではなくただのGameObjectになります。Prefabとの紐づけが切れるだけなので、Prefab自体は消えません。ここで一つ注意が必要なのが、Prefabを入れ子にしている場合です。この状態で親をUnpackすると、親Prefabとの接続は切れるものの子Prefabとの接続は切れません。Completedlyを選択します。これですべてのPrefabとの接続が解除されました。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。