Hello everyone !
I’m trying to show variables from children class in the inspector, while having a list of parent class.
So in my game I’m making several action scripts all inheriting from one base master Action script as such:
[System.Serializable]
public class BaseAction {
public ActionEnum actionType;
// Some base variables and methods here
}
public class ChildAction1 : BaseAction {
// Child action specific variables and methods
}
public class ChildAction2 : BaseAction {
// Child specific variables and methods
}
Where ActionEnum
is a public enum representing all the possible child actions
and i have another script holding a public List<BaseAction> actions
. I then update the list as such:
[ExecuteInEditMode]
public class ActionHolder : MonoBehaviour {
public List<BaseAction> actions;
private List<ActionEnum> actionTypes;
private void OnValidate () {
for (int i = 0; i < actions.Count; i++)
{
var action= actions*;*
if (action.actionType != actionTypes*)*
{
actionTypes = action.actionType;
switch (action.actionType)
{
case ActionEnum.ChildAction1:
actions = new ChildAction1();
break;
case ActionEnum.ChildAction2:
actions = new ChildAction2();
break;
default:
break;
}
actions_.actionType = actionTypes*;
}
}
}
}*
And of course I initialize the actionTypes
enum at the start and update it when the size of the list is changed to avoid out-of-bound errors. The swapping works perfectly fine up to this point.
My main problem is that in the inspector, only variables from the BaseAction
class are displayed, and I would like it to show variables from the child class.
Is there an easy way to do it or should I make a custom editor script for the list where I recreate every single variable field for each member of the actions list (basically rewriting the entire OnInspectorGUI()
function.
Is there another way ?_