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

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

はじめに

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

using UnityEngine;

public class SampleClass : MonoBehaviour
{
	public GameObject oldObject;
}

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

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

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

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

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

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

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

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

変数名を変更し、変数の上に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;
}

変数名の変更後は FormerlySerializedAs のコード部分は削除して問題ありません。

参考資料

参考 FormerlySerializedAsAttributeUnity Documentation