[Unity] 設定した値を保持して変数名を変更するFormerlySerializedAs

2021年6月7日

Unity のオブジェクトにスクリプトをアタッチし、そのスクリプト内で定義したpublicレベルまたはシリアライズした変数にインスペクターで値を設定したとします。

unityのインスペクターで変数に値を設定

後にスクリプトを編集して変数名を変えると、デフォルトでは割り当てた値やオブジェクトは消えてしまいます。

unityのスクリプトの変数名を変更すると値の紐付けが解除される

これを防ぐには UnityEngine.Serialization に定義されている FormerlySerializedAs を使用します。

例えば SerializeField によってインスペクター上で可視化した変数 before の名前を after 変更し、かつその値を維持させるにはスクリプトで以下のように記述します。

using UnityEngine.Serialization;

// シリアライズした変数の値を維持する
// 変数名を before から after に変更する例
[SerializeField]
[FormerlySerializedAs("before")]
GameObject after;

FormerlySerializedAs の引数には、変更前の変数の名前を入力します。

変数の名前を変更した後、Unity の編集画面に戻ってビルドが走ったら FormerlySerializedAs を削除して大丈夫です。これによって変数の値を維持した状態で自由に名前を設定できます。

また、この機能を使用するには UnityEngine.Serialization の using が必要ですので注意してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です