protected override void OnInspectorDefaultGUI() { base.OnInspectorDefaultGUI(); if (Targets.Length > 1) { EditorGUILayout.HelpBox("FSM cannot be multi-edited.", MessageType.None); return; } GUI.enabled = !EditorApplication.isPlaying; GUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("Finite state machine!", MessageType.Info); GUILayout.EndHorizontal(); PropertyField(nameof(FSM.IsAutoRegister), "Auto Register"); PropertyField(nameof(FSM.Name), "Name"); PropertyField(nameof(FSM.Group), "Group"); _stateList.DoLayoutList(); GUILayout.BeginHorizontal(); GUILayout.Label("Data", GUILayout.Width(LabelWidth)); if (GUILayout.Button(Target.Data, EditorStyles.popup, GUILayout.Width(EditorGUIUtility.currentViewWidth - LabelWidth - 25))) { GenericMenu gm = new GenericMenu(); gm.AddItem(new GUIContent("<None>"), Target.Data == "<None>", () => { Undo.RecordObject(target, "Set FSM Data Class"); Target.Data = "<None>"; HasChanged(); }); gm.AddItem(new GUIContent("<New Data Script>"), false, () => { EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_FSMData_Folder, "FSMData", "FSMDataTemplate"); }); gm.AddSeparator(""); List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type => { return(type.IsSubclassOf(typeof(FSMDataBase)) && !type.IsAbstract); }); for (int i = 0; i < types.Count; i++) { int j = i; gm.AddItem(new GUIContent(types[j].FullName), Target.Data == types[j].FullName, () => { Undo.RecordObject(target, "Set FSM Data Class"); Target.Data = types[j].FullName; HasChanged(); }); } gm.ShowAsContext(); } GUILayout.EndHorizontal(); GUI.enabled = true; OnArgsGUI(); }
private void NewSettingItemScript() { EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_SettingItem_Folder, "SettingItem (EditorOnly)", "SettingItemTemplate"); }
/// <summary> /// 新建任务点脚本 /// </summary> private void NewTaskPointScript() { EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_TaskPoint_Folder, "TaskPoint", "TaskPointTemplate"); }
private void OnArgsGUI() { GUILayout.BeginHorizontal(); GUILayout.Label("Args", GUILayout.Width(LabelWidth)); string argsName = Target.Args != null?Target.Args.GetType().FullName : "<None>"; if (GUILayout.Button(argsName, EditorStyles.popup, GUILayout.Width(EditorGUIUtility.currentViewWidth - LabelWidth - 25))) { GenericMenu gm = new GenericMenu(); gm.AddItem(new GUIContent("<None>"), Target.Args == null, () => { if (_argsEditor != null) { DestroyImmediate(_argsEditor); _argsEditor = null; } if (Target.Args != null) { Undo.DestroyObjectImmediate(Target.Args); Target.Args = null; HasChanged(); } }); gm.AddItem(new GUIContent("<New Args Script>"), false, () => { EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_FSMArgs_Folder, "FSMArgs", "FSMArgsTemplate"); }); gm.AddSeparator(""); Type argsType = Target.Args != null?Target.Args.GetType() : null; List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type => { return(type.IsSubclassOf(typeof(FSMArgsBase)) && !type.IsAbstract); }); for (int i = 0; i < types.Count; i++) { int j = i; gm.AddItem(new GUIContent(types[j].FullName), argsType == types[j], () => { if (argsType != types[j]) { if (_argsEditor != null) { DestroyImmediate(_argsEditor); _argsEditor = null; } if (Target.Args != null) { Undo.DestroyObjectImmediate(Target.Args); Target.Args = null; HasChanged(); } Target.Args = Undo.AddComponent(Target.gameObject, types[j]) as FSMArgsBase; Target.Args.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector; HasChanged(); } }); } gm.ShowAsContext(); } GUILayout.EndHorizontal(); if (Target.Args != null) { if (_argsEditor == null) { _argsEditor = CreateEditor(Target.Args); } GUILayout.BeginVertical("Icon.InfiniteTrack"); GUILayout.Space(5); _argsEditor.OnInspectorGUI(); GUILayout.Space(5); GUILayout.EndVertical(); } }