- Home /
Building a Collection of Subclasses and Modifying Their Public Members from the Inspector
I'm trying to figure out a way to have a component script that I can attach to an object in the scene that holds a collection of references to objects of type BaseClass but would allow me to view and edit the public members of subclasses of BaseClass in the same collection.
For example, I have a component script called CommandList
that I attach to an object in the scene. It has a member public CommandHolder[];
where CommandHolder
looks like this:
[Serializable]
public class CommandHolder
{
public BaseCommand command;
}
Where BaseCommand
is just some base class that we'll say has no public members.
Now in the Unity Inspector if we look at an object with a CommandList
component we'll be able to define an array size for our array of CommandHolder
elements. Then I can drag and drop scripts from my Assets into the public BaseCommand command
field of the CommandHolder
object in the inspector.
So this is where my question comes in. If I have a class called WaitCommand
:
public class WaitCommand : BaseCommand
{
public int seconds;
}
And another called MoveCommand
:
public class MoveCommand : BaseCommand
{
public Vector3 direction;
public float speed;
public float duration;
}
Then what I want is if I drag and drop a WaitCommand
script into the command
field of a CommandHolder
element in my CommandHolder
array then I want to be able to inspect the seconds
public field in the inspector. I understand reason this doesn't happen is because CommandHolder
expects a BaseCommand
object so its only treating our WaitCommand
as its base class and not exposing the public int seconds
member that only exists in the subclass. So then how can I get the behavior I want?
I imagine this would involve some reflection, because I don't want the solution to involve a custom inspector class for each possible subclass of BaseCommand
, I want it to just work.
Your answer
Follow this Question
Related Questions
CustomScroll inherited from RectScroll, executing in edit mode 0 Answers
Prefix label greyed out when following component disabled 1 Answer
Detecting GUI.changed using DrawDefaultInspector 3 Answers
Custom inspector for MonoScript 1 Answer
OnInspectorGUI changes reset when played in editor or building 2 Answers