[GameResource( "Quest", "quest", "A quest given to the user !", Category = "quest" )] public class Quest : GameResource { [Property,InlineEditor,TypeSelector] public TaskBase Task { get; set; } } //The two attributes here are from .net [JsonPolymorphic] [JsonDerivedType( typeof(Collect), "Collect" )] // Yeah you have to do this for every type. blame C#, not me. public abstract class TaskBase //Because this class is abstract it will not showup in the menu. { [Property] public string QuestName {get;set};// all types will show this } public class Collect : TaskBase { [Property] public int AmountToCollect {get;set;} } public class TalkTo : TaskBase { [Property] public GameObject Target {get;set;} }