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 } }