Unityのインスペクター上でシリアライズされた変数に値を色々と設定します。
後になって変数名を変えたくなったので、変数名を変えると…
せっかく入れてた値が消えてしまった!!
という時のための方法です。
解決策
using UnityEngine.Serialization;
[FormerlySerializedAs("変更前の変数名")]
var 変更後の変数名;
解決策としては[FormerlySerializedAs(“変更前の変数名”)]タグを使います。
最初に出した画像の例だと
public class StageData : ScriptableObject
{
// その他は割愛
[SerializeField] private CharacterData[] _characterDataArray;
public CharacterData[] CharacterDataArray => _characterDataArray;
}
という形になっているのを
using UnityEngine.Serialization;
public class StageData : ScriptableObject
{
// その他は割愛
[FormerlySerializedAs("_characterDataArray")]
[SerializeField] private CharacterData[] _charaDataArray;
public CharacterData[] CharaDataArray => _charaDataArray;
}
とすることで
値を保持したまま変数名を変えることが出来ます!
ただし、アセットデータの中身を見てみると、データとしてはまだ前の変数名のままデータが保持されています。
これは、アセットデータ自体に変更を入れたわけではないのでDirtyフラグがついておらず、Unityエディタ側で変更の検知がされないためです。
そのため、この状態でFormerlySerializedAsを外してしまうと、また設定した値は消えてしまいます。
FormerlySerializedAsを外す前にDirtyフラグを付けて、アセットデータに変更を入れるように気を付けましょう。
Dirtyフラグは何かしら値を入れ直して保存する、もしくはこちらの記事で紹介したような方法で付けることが出来ます!
コメント