public void OnEnable()
    {
        // Cache the ActionSet instance being edited by this inspector
        ActionSet actionSet = (ActionSet)target;

        // Creates a list containing all of the action set's basic actions
        actionSet.basicActions.actions = new BasicAction[] {
            actionSet.basicActions.idle,
            actionSet.basicActions.walk,
            actionSet.basicActions.hit,
            actionSet.basicActions.knockback,
            actionSet.basicActions.knockbackRise,
            actionSet.basicActions.death,
            actionSet.basicActions.deathKnockback,
            actionSet.basicActions.nullAction
        };

        // Inialize the default properties for each basic action
        actionSet.basicActions.Init();

        // Create the editors for the basic actions
        basicActionEditors = new BasicActionEditor[actionSet.basicActions.actions.Length];

        for (int i = 0; i < actionSet.basicActions.actions.Length; i++)
        {
            basicActionEditors[i] = new BasicActionEditor(actionSet.basicActions.actions[i]);
        }
    }
    public override void OnInspectorGUI()
    {
        // The ActionSet instance being edited by this inspector
        ActionSet    actionSet    = (ActionSet)target;
        BasicActions basicActions = actionSet.basicActions;

        // Add undo support to the ActionSet instance.
        Undo.RecordObject(actionSet, "Action Set Undo");

        /*************************
        * BASIC ACTIONS FOLDOUT *
        * ***********************/
        EditorGUI.indentLevel = 0;

        showBasicActionsFoldout = EditorGUILayout.Foldout(showBasicActionsFoldout, "Basic Actions");

        if (showBasicActionsFoldout)
        {
            EditorGUILayout.BeginVertical();
            {
                EditorGUI.indentLevel = 1;

                // Cycle through each basic action in the ActionSet
                for (int i = 0; i < basicActionEditors.Length; i++)
                {
                    BasicActionEditor basicActionEditor = basicActionEditors[i];

                    basicActionEditor.Display();
                }
            }
            EditorGUILayout.EndHorizontal();
        }

        /**************************
        * COMBAT ACTIONS FOLDOUT *
        **************************/
        EditorGUI.indentLevel = 0;

        // "Attack Actions" foldout
        showCombatActionsFoldout = EditorGUILayout.Foldout(showCombatActionsFoldout, "Combat Actions (" + actionSet.combatActionScriptableObjects.Length + ")");

        if (showCombatActionsFoldout)
        {
            EditorGUILayout.BeginVertical();
            {
                EditorGUI.indentLevel = 1;

                // Display each Action in the action set
                for (int i = 0; i < actionSet.combatActionScriptableObjects.Length; i++)
                {
                    // Select an action
                    EditorGUILayout.BeginHorizontal();
                    {
                        actionSet.combatActionScriptableObjects[i] = (ActionScriptableObject)EditorGUILayout.ObjectField(actionSet.combatActionScriptableObjects[i],
                                                                                                                         typeof(ActionScriptableObject), false);

                        // Delete action from action set
                        if (GUILayout.Button("X", GUILayout.Width(40)))
                        {
                            actionSet.combatActionScriptableObjects = ArrayUtils.Remove <ActionScriptableObject>(actionSet.combatActionScriptableObjects,
                                                                                                                 actionSet.combatActionScriptableObjects[i]);
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }

                // Add action ("+") button
                EditorGUILayout.BeginHorizontal();
                {
                    EditorGUILayout.LabelField("");
                    // Add animation string
                    if (GUILayout.Button("+", GUILayout.Width(40)))
                    {
                        actionSet.combatActionScriptableObjects = ArrayUtils.Add <ActionScriptableObject>(actionSet.combatActionScriptableObjects, null);
                    }
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.HelpBox("The combat actions at the top of the list have priority over the lower ones. " +
                                        "That is, if two actions are activated using the same input, the one higher on the " +
                                        "list will be chosen", MessageType.Info);
            }
            EditorGUILayout.EndVertical();
        }         // End "Attack Actions" foldout
    }