LIGHT11スマートフォン用の表示で見るLIGHT112019-03-25【Unity】Unity2018.3以降でFBXをPrefab化して正しく取り扱うUnity2018.3から新しいPrefabワークフローが導入されました。それに伴いFBXをPrefab化して取り扱う方法が変わったのでまとめます。Variantにして使うVariantでフィールドなどをオーバーライドするFBXのGameObjectをリネームしてみるFBXの階層構造を変更してみる追加したGameObjectの親をリネームしてみるまとめ関連Unity2018.3.4はじめに新PrefabワークフローにおけるPrefabの基本的な知識は下記にまとめています。本記事はこの内容を前提としていますのでご了承ください。Variantを作れます。インスタンスをオーバーライドしたり、逆にFBX側を更新することなどを考えるとVariantにしておくのが便利そうです。Variantを選択します。Variantを選択してもOKです。スクリプトからも作れます。Variantもフィールドやコンポーネント、GameObjectをオーバーライドできます。フィールドはこんな感じです。コンポーネントの追加はこんな感じです。GameObjectの追加はこんな感じです。ちなみに当然ではありますが、元のFBXへのApplyはできません。このようにオーバーライドしたものは元のPrefabを更新しても基本的には保持されます。いちいちコンポーネントを貼りなおしたりしなくていいので非常に便利になりました。「基本的には」と書いたのは次節から説明するように保持されないケースもあるためです。Variantに変更が反映されるかを見ていきます。下図は現状の階層構造を示しています。この中のSphereをSphare_RenamedにリネームしてFBXを更新します。この場合、リネームしたGameObjectのコンポーネントに対するオーバーライドは引き継がれないようです。Probesをオーバーライドしていましたが、消えました。FBXの階層構造を変更してみる次に階層構造を変更してみます。前節の状態からSphare_RenamedとIcosphereを入れ替えます。コンポーネントをオーバーライドした内容も引き継がれています。オーバーライドで追加したGameObject、CubeがIcoSphereの移動に紐づいて移動しました。名前を変えなければ同一のGameObjectとしてみなされる(オーバーライドの内容は引き継がれる)オーバーライドで追加したGameObjectは親に紐づくということが言えそうです。追加したGameObjectの親をリネームしてみるではこの状態でIcosphereをリネームするとCubeはどうなるのでしょうか?IcosphereをIcosphere_Renamedにリネームします。オーバーライドで追加したGameObjectであるCubeが消えてしまいました。リネームすると別のGameObjectとしてみなされるオーバーライドされたコンポーネントは引き継がれない子として追加したGameObjectは引き継がれないということが言えそうです。Variantにして使うのがよさそうです。VariantにすることでFBXの更新はしやすくなるものの、GameObjectの同一性を名前で担保しているためリネームには注意が必要そうです。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。インストールから基本的な使い方・注意点まとめ【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。