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(); }