LoginSignup
22
20

More than 5 years have passed since last update.

PrefabやSceneのSerializeされた変数の値を保持したままリネームする

Posted at

リファクタリング時に参照が外れる問題

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の変数を
いちいちアタッチしなおす苦労に比べると雲泥の差です

22
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
20