void ShowAddLayer()
        {
            layersProperty = serializedObject.FindProperty("layers");

            List<Type> layerTypes = new List<Type>();
            List<string> layerTypesName = new List<string>{ " " };

            foreach (Type layerType in StateMachineUtility.LayerStateDict.Keys) {
                if (layersProperty.TrueForAll<StateLayer>(layer => layer.GetType() != layerType)) {
                    layerTypes.Add(layerType);
                    layerTypesName.Add(StateMachineUtility.LayerTypeNameDict[layerType]);
                }
            }

            EditorGUI.BeginDisabledGroup(Application.isPlaying);
            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Add Layer", new GUIStyle("boldLabel"), GUILayout.Width(75));
            int layerTypeIndex = EditorGUILayout.Popup(layerTypes.IndexOf(selectedLayerType) + 1, layerTypesName.ToArray()) - 1;
            selectedLayerType = layerTypeIndex == -1 ? null : layerTypes[Mathf.Clamp(layerTypeIndex, 0, layerTypes.Count - 1)];

            if (selectedLayerType != null) {
                OnLayerAdded(layersProperty);
            }

            EditorGUILayout.EndHorizontal();
            EditorGUI.EndDisabledGroup();
        }