【Unity】Unityに既にインポートしてあるFBXを上書きするときの挙動と注意点

UnityにすでにインポートしてあるFBXを上書きした時に、FBXのインスタンス
それから作られたPrefabがどこまで更新されるのか、簡単に確認してみました。

Unity2017.3

準備

まずは準備です。
Blenderで適当にこんな感じのモデルを作ってFBXで書き出します。

f:id:halya_11:20181017140333p:plain

これをUnityにインポートします。
インポートしたFBXをHierarchyにドラッグすることでインスタンス化されGameObjectが作られます。
また、このGameObjectをProjectビューにドラッグすることでPrefab化されます。

今回はFBXをHierarchyにドラッグしただけの状態(Prefab化してない状態)と
Prefab化した状態のものをそれぞれSceneに置いた状態でFBXを色々と更新してみます。

ちなみにFBXの更新は、GUIDが変わらないようにExplorerから上書きします。

頂点を変形する

まず頂点を変形してみます。
Blenderで一番下のオブジェクトだけ変形しエクスポートし、FBXを上書きします。

f:id:halya_11:20181017143434p:plain

結果、Prefab化されているものにもされていないものにも変形が反映されました。
Prefab化されていても、参照しているメッシュは元のFBXのものなので予想通りの挙動です。

オブジェクトをリネームする

次にオブジェクトをリネームします。
Blenderでリネームしてエクスポートし、FBXを上書きします。

すると、インポート後のメッシュもリネームされます。
Prefab化してないインスタンスの場合、メッシュが正常にリネームされました。

f:id:halya_11:20181017145212p:plain

しかし、Prefab化しているインスタンスはメッシュの参照が外れてしまいました。

f:id:halya_11:20181017143926p:plain

これらの挙動を見ると、どうやらリネームされたというより新しいメッシュが作られたと考えるのが正しそうです。

名前が同じで異なるオブジェクトに差し替える

それでは名前は変えずにオブジェクトを変えたらどうなるでしょうか。
Blenderで一番下のオブジェクトを削除し、同じ名前の新しいオブジェクトに差し替えます。

これをUnityにインポートしたところ、Prefab化していないもの、しているものどちらも更新されました。

f:id:halya_11:20181017144304p:plain

名前が変わらなければメッシュが上書きされるため、参照は外れないようです。

オブジェクトを移動する

次にオブジェクトの位置を変えてみます。
これを更新すると、Prefab化してない場合は反映されました。

f:id:halya_11:20181017144724p:plain

Prefab化してると反映されませんでした。

f:id:halya_11:20181017144428p:plain

これはまあTransformの情報はPrefabにシリアライズされているということで予想通りではあります。

オブジェクトを追加する

続いて新しいオブジェクトを追加して上書きしてみます。

まずPrefab化してない場合は正常に反映されます。

f:id:halya_11:20181017155040p:plain

Prefab化している場合は反映されませんでした。

f:id:halya_11:20181017155304p:plain

Prefabが追加されたメッシュの情報を保持していないため反映されなかったようです。

マテリアルを更新する

最後にマテリアルを更新してみます。

まず、Model Importerの設定をUse Embedded Materialsにした状態で更新してみます。

f:id:halya_11:20181017160226p:plain

マテリアルの更新が反映されました。
次にModel Importerの設定をUse External Materialsにした状態で更新してみます。

f:id:halya_11:20181017160425p:plain

こちらは更新前と変わりませんでした。
最初のインポート時に作られたマテリアルが使われているようです。