Unity2018.3から2018.2へのダウングレードで壊れたPrefabをなんとかする方法

こんにちは、プログラマーのnotargsです。

概要

さて、Unity開発をやっていると、「Unity2018.3に上げたは良いけど、やっぱりUnity2018.2にダウングレードしたい!!」というニーズが発生すること、あると思います。

Scriptのダウングレードはまあちまちまやれば良いのですが、Prefabは悲惨なことになります。

悲惨なPrefabの例

???なにこれ???😩😩😩

大きく下の3つの問題が発生してしまっています。

  • ドラッグ&ドロップでシーンに配置できない
  • インスペクタがなんかおかしい
  • アセットの小要素もなんかおかしい

ということで、今回はこの「悲惨なPrefab」をなんとかする方法について調べてみました!

yamlを調べる

prefabをVSCodeなどのテキストエディタで開いてみると、こんな感じのyamlが書かれています。

こちらをUnity2018.3のものとUnity2018.2のもので見比べてみて、違う部分を手作業で書き換えてあげれば直るはずです。

早速直していきます。

Prefab区を追記する

まず、Unity2018.3のprefabではUnity2018.2にあったPrefab区がありません。

これが存在しない場合、Unity2018.2ではPrefabとして認識されず、Sceneにドラッグ&ドロップしても何も起こらない、という現象が発生してしまいます。

Unity2018.2のときのログが残っていればそこからコピーしてくるのが安心ですが、基本的にidなどはこれで固定のようです。

[ここを書き換える]の部分は、直下にある

からIDをコピってきましょう。

m_PrefabInstance、m_PrefabAssetを消してm_PrefabInternalに戻す

続いて、各種Componentが持っている

を消して、

に書き換えてあげます。

fileIDの100100000は、prefabに対する参照で、全prefabで共通のようです。

ここまでの作業で、ようやくドラッグ&ドロップでシーンに配置できるようになりました!

まだインスペクタとアセットの表記はおかしいので、引き続き修正していきます。

各ComponentのHideFlagsを書き換える

続いて、HideFlagsを書き換えてあげます。

HideFlagsはこんな感じで定義されています。

このHideFlagsがUnity2018.2からUnity2018.3への移行時に1→0になってしまうので、ちまちまと1に戻してあげましょう。

↑を↓のように書き換えていきます。

「GameObject:」のセクションはHideFlags: 0のままで大丈夫なので、一緒にいじってしまわないように注意してください。

できあがり

ここまでの作業で、ようやくUnity2018.2でもPrefabが正しく動くようになりました!

おつかれさまです!!

まともなPrefab!!!