リファクタリング時に参照が外れる問題
UnityではPublicや[SerializeField]属性のついた変数はSceneやPrefab上に値が保持されます
コードのリファクタリングなどで変数名をそのまま変更すると
これらの値や参照は外れ、Default値にリセットされてしまいます
変数名のリネーム毎にPrefabの値の再設定が必要となり、非常に大変
FormerlySerializedAsAttributeを使用する
Unityで提供している属性にFormerlySerializedAsAttributeというものがあります
http://docs.unity3d.com/jp/current/ScriptReference/Serialization.FormerlySerializedAsAttribute.html
この属性と変数に使用してリネームをかけることで
Serializeされた情報が保持されたまま変数名を変更することができます
###例)
puclic class Hoge : MonoBehaviour
{
[SerializeField] private MyClass Foo;
}
このクラスのFoo変数をリファクタリングするとします
public class Hoge : MonoBehaviour
{
[FormerlySerializedAs("Foo")]
[SerializeField] private MyClass _foo;
public MyClass Foo
{
get { return _foo; }
}
}
このように変更したら、Unityを開いてSave Projectします。
そうすると元々Foo変数にSerializeされていたMyClassの参照が
_foo変数に保持されます
一度Save Projectかけて値が保持されたのを確認したら
[FormerlySerializedAs("Foo")]
の記述は消してしまってOKです
Project Saveがするのが若干面倒ですが、Prefabの変数を
いちいちアタッチしなおす苦労に比べると雲泥の差です