UnityにすでにインポートしてあるFBXを上書きした時に、FBXのインスタンスや
それから作られたPrefabがどこまで更新されるのか、簡単に確認してみました。
Unity2017.3
2019/3/25追記 : Unity2018.3以降はこちら
Unity2018.3のPrefabのワークフロー変更に伴い挙動が変わったので次の記事にまとめました。
準備
まずは準備です。
Blenderで適当にこんな感じのモデルを作ってFBXで書き出します。
これをUnityにインポートします。
インポートしたFBXをHierarchyにドラッグすることでインスタンス化されGameObjectが作られます。
また、このGameObjectをProjectビューにドラッグすることでPrefab化されます。
今回はFBXをHierarchyにドラッグしただけの状態(Prefab化してない状態)と
Prefab化した状態のものをそれぞれSceneに置いた状態でFBXを色々と更新してみます。
ちなみにFBXの更新は、GUIDが変わらないようにExplorerから上書きします。
頂点を変形する
まず頂点を変形してみます。
Blenderで一番下のオブジェクトだけ変形しエクスポートし、FBXを上書きします。
結果、Prefab化されているものにもされていないものにも変形が反映されました。
Prefab化されていても、参照しているメッシュは元のFBXのものなので予想通りの挙動です。
オブジェクトをリネームする
次にオブジェクトをリネームします。
Blenderでリネームしてエクスポートし、FBXを上書きします。
すると、インポート後のメッシュもリネームされます。
Prefab化してないインスタンスの場合、メッシュが正常にリネームされました。
しかし、Prefab化しているインスタンスはメッシュの参照が外れてしまいました。
これらの挙動を見ると、どうやらリネームされたというより新しいメッシュが作られたと考えるのが正しそうです。
名前が同じで異なるオブジェクトに差し替える
それでは名前は変えずにオブジェクトを変えたらどうなるでしょうか。
Blenderで一番下のオブジェクトを削除し、同じ名前の新しいオブジェクトに差し替えます。
これをUnityにインポートしたところ、Prefab化していないもの、しているものどちらも更新されました。
名前が変わらなければメッシュが上書きされるため、参照は外れないようです。
オブジェクトを移動する
次にオブジェクトの位置を変えてみます。
これを更新すると、Prefab化してない場合は反映されました。
Prefab化してると反映されませんでした。
これはまあTransformの情報はPrefabにシリアライズされているということで予想通りではあります。
オブジェクトを追加する
続いて新しいオブジェクトを追加して上書きしてみます。
まずPrefab化してない場合は正常に反映されます。
Prefab化している場合は反映されませんでした。
Prefabが追加されたメッシュの情報を保持していないため反映されなかったようです。
マテリアルを更新する
最後にマテリアルを更新してみます。
まず、Model Importerの設定をUse Embedded Materialsにした状態で更新してみます。
マテリアルの更新が反映されました。
次にModel Importerの設定をUse External Materialsにした状態で更新してみます。
こちらは更新前と変わりませんでした。
最初のインポート時に作られたマテリアルが使われているようです。