public static StateLayer AddLayer(StateMachine machine, StateLayer layer, UnityEngine.Object parent)
        {
                        #if UNITY_EDITOR
            layer.hideFlags = HideFlags.HideInInspector;

            UnityEditor.SerializedObject   parentSerialized = new UnityEditor.SerializedObject(parent);
            UnityEditor.SerializedObject   layerSerialized  = new UnityEditor.SerializedObject(layer);
            UnityEditor.SerializedProperty layersProperty   = parentSerialized.FindProperty(parent is StateMachine ? "layers" : "stateReferences");
            UnityEditor.SerializedProperty parentProperty   = layerSerialized.FindProperty("parentReference");

            if (parentProperty.GetValue <UnityEngine.Object>() == null)
            {
                parentProperty.SetValue(parent);
            }

            layerSerialized.FindProperty("machineReference").SetValue(machine);
            layerSerialized.ApplyModifiedProperties();

            if (!layersProperty.Contains(layer))
            {
                layersProperty.Add(layer);
            }

            UpdateLayerStates(machine, layer);
                        #endif

            return(layer);
        }
        public static State AddState(StateMachine machine, StateLayer layer, State state)
        {
            state.hideFlags = HideFlags.HideInInspector;

            UnityEditor.SerializedObject   layerSerialized = new UnityEditor.SerializedObject(layer);
            UnityEditor.SerializedObject   stateSerialized = new UnityEditor.SerializedObject(state);
            UnityEditor.SerializedProperty statesProperty  = layerSerialized.FindProperty("stateReferences");

            stateSerialized.FindProperty("layerReference").SetValue(layer);
            stateSerialized.FindProperty("machineReference").SetValue(machine);
            stateSerialized.ApplyModifiedProperties();

            if (!statesProperty.Contains(state))
            {
                statesProperty.Add(state);
            }

            return(state);
        }