Unity 2019.3 から SerializeReference
が導入され
interface や abstract class でもシリアライズできるようになりました
Unity - Scripting API: SerializeReference
SerializeField
では 値型でシリアライズされるのですが
SerializeReference
は 参照型でシリアライズできるようになっているため
interface や abstract class でもシリアライズできるようになっております
Interface の シリアライズ
using UnityEngine; public interface ISample {} public class SampleMonoBehaviour : MonoBehaviour { [SerializeReference] private ISample target = new Sample1(); private class Sample1 : ISample { public int Value; } private class Sample2 : ISample { public string Value; } }
abstract class のシリアライズ
using UnityEngine; public abstract class SampleBase { public int BaseValue; } public class SampleMonoBehaviour : MonoBehaviour { [SerializeReference] private SampleBase target = new Sample1(); private class Sample1 : SampleBase { public int Value; } private class Sample2 : SampleBase { public string Value; } }
Array List には非対応
例えば以下のように Array にしてみると何も表示されないので
Editor を拡張して表示できるようにする必要がある
[SerializeReference] private SampleBase[] target = new SampleBase[] { new Sample1(), new Sample2(), };