【Unity】SerializeField などで設定した値を保存したまま変数名を変更する方法

Unityでシリアライズで設定した値を保存したまま変数名を変更する方法

スクリプトにて Unity 側でシリアライズ可能な値を定義したとします。
以下の例では SampleClass.cs に oldObject を定義しています。

using UnityEngine;

public class SampleClass : MonoBehaviour
{
	public GameObject oldObject;
}

Unity の Inspector ビュー上で oldObject に値を設定します。

Unityでシリアライズの値を設定

設定した後に変数名を oldObject から newObject に変更します。

Unity 側を確認すると、先程設定した値の参照が外れてしまいます。

Unityでシリアライズの値が外れた状態

本記事では、シリアライズで設定した値を保存したまま変数名を変える方法を紹介します。

FormerlySerializedAs 属性を使って値を保持したまま変数名を変更

FormerlySerializedAs 属性を使うことで、シリアライズの値を保持したまま変数名を変更できます。

参考 FormerlySerializedAsAttributeUnity Documentation

変数名を変更し、変数の上にFormerlySerializedAs 属性を付与します。引数には変更前の変数名を記載します。

using UnityEngine;
using UnityEngine.Serialization;

public class SampleClass : MonoBehaviour
{
	// 引数には変更前の変数名を記載する
	[FormerlySerializedAs("oldObject")]
	public GameObject newObject;
}

そうすることで Unity 上で設定した値が外れることなく変数名の変更が可能になります。

SerializeField 属性を用いた private な変数にも FormerlySerializedAs が使用できます。

using UnityEngine;
using UnityEngine.Serialization;

public class SampleClass : MonoBehaviour
{
	[FormerlySerializedAs("_oldObject")]
	[SerializeField]
	private GameObject _newObject;
}

関連記事

【Unity】エディターのレイアウト(Layout)を変更・保存する方法【Unity】エディターのレイアウト(Layout)を変更・保存する方法【Unity】便利な数学関数Mathfクラスまとめ【Unity】便利な数学関数の Mathf クラスまとめ【Clamp, Abs など】