スクリプトにて Unity 側でシリアライズ可能な値を定義したとします。
以下の例では SampleClass.cs に oldObject
を定義しています。
using UnityEngine;
public class SampleClass : MonoBehaviour
{
public GameObject oldObject;
}
Unity の Inspector ビュー上で oldObject
に値を設定します。
設定した後に変数名を oldObject
から newObject
に変更します。
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】便利な数学関数の Mathf クラスまとめ【Clamp, Abs など】