Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

iwashihead
Unityエンジニアしてます。 好きなゲームは、ミラクルニキです。 ギルマスやってます♂ ギルメン募集してます!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした