うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】SerializeReference 時に 変数の初期値が正しく変更できなかった問題

SerializeReference を利用していて下記のコード再生時に value が false になってしまう問題が発生していた

それもそのはずで Serializable でクラスをシリアライズしているので
シリアライズされていない変数は初期値が入ってしまう

public class Sample : MonoBehaviour
{
    [SerializeReference]
    private Sample sample = new Temp();
}
 
[Serializable]
public abstract class Sample
{
    protected bool value = true;
    internal void SetUp()
    {
        Debug.Log(value); // false
    }
}
 
[Serializable]
public class Temp : Sample
{
}

この問題を解決するには value に対して SerializeField をつけてあげると解決する
SerializeField をつけるだけだと、Inspector 上に表示されてしまうので、
表示が不要であれば HideInInspector もつけてあげる

[Serializable]
public abstract class Sample
{
    [SerializeField, HideInInspector]
    protected bool value = true;
    internal void SetUp()
    {
        Debug.Log(value); // true
    }
}