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 OnGUI() { EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("批处理[ " + (_folder ? _folder.name : "Root") + " ]文件夹下的[ " + (_objectType != null ? _objectType.FullName : "Object") + " ]对象!", MessageType.Info); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Folder:", GUILayout.Width(120)); _folder = EditorGUILayout.ObjectField(_folder, typeof(DefaultAsset), false) as DefaultAsset; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Object Filter:", GUILayout.Width(120)); _objectTypeFilter = EditorGUILayout.TextField(_objectTypeFilter); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Object:", GUILayout.Width(120)); if (GUILayout.Button(_objectType != null ? _objectType.FullName : "<None>", "Minipopup")) { GenericMenu gm = new GenericMenu(); List <Type> types = EditorGlobalTools.GetTypesInAllAssemblies(); gm.AddItem(new GUIContent("<None>"), _objectType == null, () => { _objectType = null; }); for (int i = 0; i < types.Count; i++) { Type type = types[i]; if (type.IsSubclassOf(typeof(UnityEngine.Object)) && type.FullName.ToLower().Contains(_objectTypeFilter.ToLower())) { gm.AddItem(new GUIContent(type.FullName), type == _objectType, () => { _objectType = type; }); } } gm.ShowAsContext(); } EditorGUILayout.EndHorizontal(); GUI.enabled = _folder && _objectType != null && _selectionAddMethod != null; EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Collect")) { Selection.activeObject = _folder; UnityEngine.Object[] objs = Selection.GetFiltered(_objectType, SelectionMode.DeepAssets); Selection.activeObject = null; for (int i = 0; i < objs.Length; i++) { CollectObject(objs[i]); } } EditorGUILayout.EndHorizontal(); GUI.enabled = true; }
private void OnEnable() { BuildPlayerWindow[] buildPlayerWindows = Resources.FindObjectsOfTypeAll <BuildPlayerWindow>(); _buildPlayerWindow = buildPlayerWindows.Length > 0 ? buildPlayerWindows[0] : CreateInstance <BuildPlayerWindow>(); _onDisableMethod = _buildPlayerWindow.GetType().GetMethod("OnDisable", BindingFlags.Instance | BindingFlags.NonPublic); _onGUIMethod = _buildPlayerWindow.GetType().GetMethod("OnGUI", BindingFlags.Instance | BindingFlags.NonPublic); _updateMethod = _buildPlayerWindow.GetType().GetMethod("Update", BindingFlags.Instance | BindingFlags.NonPublic); _calculateSelectedBuildTarget = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.EditorUserBuildSettingsUtils").GetMethod("CalculateSelectedBuildTarget", BindingFlags.Static | BindingFlags.Public); _activeBuildTargetGroup = typeof(EditorUserBuildSettings).GetProperty("activeBuildTargetGroup", BindingFlags.Static | BindingFlags.NonPublic); CheckResourceMode(); Check(); }
protected override void OnDefaultEnable() { base.OnDefaultEnable(); _showProperty = EditorPrefs.GetBool(EditorPrefsTable.RectTransform_Property, true); _showHierarchy = EditorPrefs.GetBool(EditorPrefsTable.RectTransform_Hierarchy, false); _showCopy = EditorPrefs.GetBool(EditorPrefsTable.RectTransform_Copy, false); Type rectTransformEditor = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.RectTransformEditor"); if (rectTransformEditor != null && targets != null && targets.Length > 0) { _originalEditor = CreateEditor(targets, rectTransformEditor); _originalOnSceneGUI = rectTransformEditor.GetMethod("OnSceneGUI", BindingFlags.Instance | BindingFlags.NonPublic); _originalOnHeaderGUI = rectTransformEditor.GetMethod("OnHeaderGUI", BindingFlags.Instance | BindingFlags.NonPublic); } }
private void OnEnable() { if (_selectionAddMethod == null) { MethodInfo[] methods = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.Selection").GetMethods(BindingFlags.Static | BindingFlags.NonPublic); for (int i = 0; i < methods.Length; i++) { if (methods[i].Name == "Add") { ParameterInfo[] parameters = methods[i].GetParameters(); if (parameters != null && parameters.Length == 1 && parameters[0].ParameterType.Name == "Object") { _selectionAddMethod = methods[i]; break; } } } } }
private void OnEnable() { _settingItems.Clear(); _settingItems.Add(new SettingItemAspectTrack()); _settingItems.Add(new SettingItemAudio()); _settingItems.Add(new SettingItemController()); _settingItems.Add(new SettingItemWebRequest()); _settingItemSigns.Clear(); _settingItemSigns.Add(true); _settingItemSigns.Add(true); _settingItemSigns.Add(true); _settingItemSigns.Add(true); List <Type> types = EditorGlobalTools.GetTypesInEditorAssemblies(); for (int i = 0; i < types.Count; i++) { if (types[i].IsSubclassOf(typeof(SettingItemBase)) && types[i].GetCustomAttribute <InternalSettingItemAttribute>() == null) { _settingItems.Add(Activator.CreateInstance(types[i]) as SettingItemBase); _settingItemSigns.Add(false); } } for (int i = 0; i < _settingItems.Count; i++) { _settingItems[i].OnBeginSetting(); } _resetGUIContent = new GUIContent(); _resetGUIContent.image = EditorGUIUtility.IconContent("_Popup").image; _resetGUIContent.tooltip = "Menu"; _editGUIContent = new GUIContent(); _editGUIContent.image = EditorGUIUtility.IconContent("d_editicon.sml").image; _editGUIContent.tooltip = "Edit Module"; _currentItem = -1; _itemFilter = ""; }
protected override void OnInspectorDefaultGUI() { base.OnInspectorDefaultGUI(); #region Property GUILayout.BeginHorizontal("MeTransitionHead"); GUILayout.Space(12); bool showProperty = EditorGUILayout.Foldout(_showProperty, "Property", true); if (showProperty != _showProperty) { _showProperty = showProperty; EditorPrefs.SetBool(EditorPrefsTable.Transform_Property, _showProperty); } GUILayout.EndHorizontal(); if (_showProperty) { GUILayout.BeginVertical(EditorGlobalTools.Styles.Box); GUILayout.BeginHorizontal(); GUILayout.Label("Position", GUILayout.Width(80)); Vector3 pos = EditorGUILayout.Vector3Field("", Target.position); if (pos != Target.position) { Undo.RecordObject(Target, "Move " + Target.name); Target.position = pos; HasChanged(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Rotation", GUILayout.Width(80)); Vector3 rot = EditorGUILayout.Vector3Field("", Target.rotation.eulerAngles); if (rot != Target.rotation.eulerAngles) { Undo.RecordObject(Target, "Rotate " + Target.name); Target.rotation = Quaternion.Euler(rot); HasChanged(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Scale", GUILayout.Width(80)); GUI.enabled = false; EditorGUILayout.Vector3Field("", Target.lossyScale); GUI.enabled = true; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("LocalPosition", GUILayout.Width(80)); Vector3 localpos = EditorGUILayout.Vector3Field("", Target.localPosition); if (localpos != Target.localPosition) { Undo.RecordObject(Target, "Move " + Target.name); Target.localPosition = localpos; HasChanged(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("LocalRotation", GUILayout.Width(80)); Vector3 localrot = EditorGUILayout.Vector3Field("", Target.localRotation.eulerAngles); if (localrot != Target.localRotation.eulerAngles) { Undo.RecordObject(Target, "Rotate " + Target.name); Target.localRotation = Quaternion.Euler(localrot); HasChanged(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("LocalScale", GUILayout.Width(80)); Vector3 localsca = EditorGUILayout.Vector3Field("", Target.localScale); if (localsca != Target.localScale) { Undo.RecordObject(Target, "Scale " + Target.name); Target.localScale = localsca; HasChanged(); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } #endregion #region Hierarchy GUILayout.BeginHorizontal("MeTransitionHead"); GUILayout.Space(12); bool showHierarchy = EditorGUILayout.Foldout(_showHierarchy, "Hierarchy", true); if (showHierarchy != _showHierarchy) { _showHierarchy = showHierarchy; EditorPrefs.SetBool(EditorPrefsTable.Transform_Hierarchy, _showHierarchy); } GUILayout.EndHorizontal(); if (_showHierarchy) { GUILayout.BeginVertical(EditorGlobalTools.Styles.Box); GUILayout.BeginHorizontal(); GUILayout.Label("Root: ", GUILayout.Width(80)); EditorGUILayout.ObjectField(Target.root, typeof(Transform), true); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Parent: ", GUILayout.Width(80)); GUI.color = Target.parent ? Color.white : Color.gray; _parent = EditorGUILayout.ObjectField(Target.parent, typeof(Transform), true) as Transform; if (_parent != Target.parent) { Undo.RecordObject(Target, "Change Parent " + Target.name); Target.SetParent(_parent); HasChanged(); } GUI.color = Color.white; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("Child Count: ", GUILayout.Width(80)); GUILayout.Label(Target.childCount.ToString()); GUILayout.FlexibleSpace(); GUI.enabled = Target.childCount > 0; if (GUILayout.Button("Detach", "Minibutton")) { if (EditorUtility.DisplayDialog("Prompt", "Are you sure you want to detach all children?", "Yes", "No")) { Undo.RecordObject(Target, "Detach Children"); Target.DetachChildren(); HasChanged(); } } GUI.enabled = true; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Expand Children", "MinibuttonLeft")) { Type type = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.SceneHierarchyWindow"); EditorWindow window = EditorWindow.GetWindow(type); MethodInfo method = window.GetType().GetMethod("SetExpandedRecursive", BindingFlags.Public | BindingFlags.Instance); int id = Target.gameObject.GetInstanceID(); method.Invoke(window, new object[] { id, true }); } if (GUILayout.Button("Retract Children", "MinibuttonRight")) { Type type = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.SceneHierarchyWindow"); EditorWindow window = EditorWindow.GetWindow(type); MethodInfo method = window.GetType().GetMethod("SetExpandedRecursive", BindingFlags.Public | BindingFlags.Instance); int id = Target.gameObject.GetInstanceID(); method.Invoke(window, new object[] { id, false }); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Retract All", "Minibutton")) { Type type = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.SceneHierarchyWindow"); EditorWindow window = EditorWindow.GetWindow(type); object hierarchy = window.GetType().GetProperty("sceneHierarchy", BindingFlags.Public | BindingFlags.Instance).GetValue(window); int[] expandedIDs = hierarchy.GetType().GetMethod("GetExpandedIDs", BindingFlags.Public | BindingFlags.Instance).Invoke(hierarchy, null) as int[]; MethodInfo method = hierarchy.GetType().GetMethod("ExpandTreeViewItem", BindingFlags.NonPublic | BindingFlags.Instance); object[] args = new object[2]; args[1] = false; for (int i = 0; i < expandedIDs.Length; i++) { args[0] = expandedIDs[i]; method.Invoke(hierarchy, args); } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); } #endregion #region Copy GUILayout.BeginHorizontal("MeTransitionHead"); GUILayout.Space(12); bool showCopy = EditorGUILayout.Foldout(_showCopy, "Copy", true); if (showCopy != _showCopy) { _showCopy = showCopy; EditorPrefs.SetBool(EditorPrefsTable.Transform_Copy, _showCopy); } GUILayout.EndHorizontal(); if (_showCopy) { GUILayout.BeginVertical(EditorGlobalTools.Styles.Box); GUILayout.BeginHorizontal(); if (GUILayout.Button("Copy Position", EditorStyles.miniButtonLeft)) { GUIUtility.systemCopyBuffer = Target.position.ToCopyString("F4"); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } if (GUILayout.Button("Copy LocalPosition", EditorStyles.miniButtonRight)) { GUIUtility.systemCopyBuffer = Target.localPosition.ToCopyString("F4"); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Copy Rotation", EditorStyles.miniButtonLeft)) { if (_copyQuaternion) { GUIUtility.systemCopyBuffer = Target.rotation.ToCopyString("F4"); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } else { string x = ClampAngle(Target.rotation.eulerAngles.x).ToString(); string y = ClampAngle(Target.rotation.eulerAngles.y).ToString(); string z = ClampAngle(Target.rotation.eulerAngles.z).ToString(); GUIUtility.systemCopyBuffer = x + "f," + y + "f," + z + "f"; GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } } if (GUILayout.Button("Copy LocalRotation", EditorStyles.miniButtonRight)) { if (_copyQuaternion) { GUIUtility.systemCopyBuffer = Target.localRotation.ToCopyString("F4"); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } else { string x = ClampAngle(Target.localRotation.eulerAngles.x).ToString(); string y = ClampAngle(Target.localRotation.eulerAngles.y).ToString(); string z = ClampAngle(Target.localRotation.eulerAngles.z).ToString(); GUIUtility.systemCopyBuffer = x + "f," + y + "f," + z + "f"; GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Copy Scale", EditorStyles.miniButton)) { GUIUtility.systemCopyBuffer = Target.localScale.ToCopyString("F4"); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Copy Name", EditorStyles.miniButtonLeft)) { GUIUtility.systemCopyBuffer = Target.name; GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } if (GUILayout.Button("Copy FullName", EditorStyles.miniButtonRight)) { GUIUtility.systemCopyBuffer = Target.FullName(); GlobalTools.LogInfo("已复制:" + GUIUtility.systemCopyBuffer); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); _copyQuaternion = GUILayout.Toggle(_copyQuaternion, "Copy Quaternion"); GUILayout.EndHorizontal(); GUILayout.EndVertical(); } #endregion }
protected override void OnBodyGUI() { base.OnBodyGUI(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("批处理[ " + (_root ? _root.name : "Root") + " ]下的[ " + (_componentType != null ? _componentType.FullName : "Component") + " ]组件!", MessageType.Info); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Root:", GUILayout.Width(120)); _root = EditorGUILayout.ObjectField(_root, typeof(GameObject), true) as GameObject; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Component Filter:", GUILayout.Width(120)); _componentTypeFilter = EditorGUILayout.TextField(_componentTypeFilter); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Component:", GUILayout.Width(120)); if (GUILayout.Button(_componentType != null ? _componentType.FullName : "<None>", "Minipopup")) { GenericMenu gm = new GenericMenu(); List <Type> types = EditorGlobalTools.GetTypesInAllAssemblies(); gm.AddItem(new GUIContent("<None>"), _componentType == null, () => { _componentType = null; }); for (int i = 0; i < types.Count; i++) { Type type = types[i]; if (type.IsSubclassOf(typeof(Component)) && type.FullName.ToLower().Contains(_componentTypeFilter.ToLower())) { gm.AddItem(new GUIContent(type.FullName), type == _componentType, () => { _componentType = type; }); } } gm.ShowAsContext(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Include Inactive:", GUILayout.Width(120)); _includeInactive = EditorGUILayout.Toggle(_includeInactive); EditorGUILayout.EndHorizontal(); GUI.enabled = _root && _componentType != null && _selectionAddMethod != null; EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Collect")) { Selection.activeGameObject = null; Component[] components = _root.transform.GetComponentsInChildren(_componentType, _includeInactive); for (int i = 0; i < components.Length; i++) { CollectComponent(components[i]); } } EditorGUILayout.EndHorizontal(); GUI.enabled = true; }
private void NewSettingItemScript() { EditorGlobalTools.CreateScriptFormTemplate(EditorPrefsTable.Script_SettingItem_Folder, "SettingItem (EditorOnly)", "SettingItemTemplate"); }
private void DynamicGUI() { #region Namespace GUILayout.BeginHorizontal("AC BoldHeader"); _isShowNamespace = EditorGUILayout.Foldout(_isShowNamespace, "Namespace", true); GUILayout.EndHorizontal(); if (_isShowNamespace) { _scrollNamespace = GUILayout.BeginScrollView(_scrollNamespace, "TextField", GUILayout.Height(150)); _namespace = EditorGUILayout.TextArea(_namespace, EditorGlobalTools.Styles.Label); GUILayout.EndScrollView(); } #endregion #region Assembly GUILayout.BeginHorizontal("AC BoldHeader"); _isShowAssemblies = EditorGUILayout.Foldout(_isShowAssemblies, "Assembly", true); GUILayout.EndHorizontal(); if (_isShowAssemblies) { GUILayout.BeginVertical(EditorGlobalTools.Styles.Box, GUILayout.Height(150)); _scrollAssemblies = GUILayout.BeginScrollView(_scrollAssemblies); for (int i = 0; i < _assemblies.Count; i++) { GUILayout.BeginHorizontal(); GUILayout.Label(i + ".", GUILayout.Width(25)); _assemblies[i] = EditorGUILayout.TextField(_assemblies[i]); if (GUILayout.Button("Browse", EditorStyles.miniButtonLeft, GUILayout.Width(50))) { string initialPath = File.Exists(_assemblies[i]) ? Path.GetDirectoryName(_assemblies[i]) : _assembliesPath; string path = EditorUtility.OpenFilePanel("Browse Assembly Path", initialPath, "*.dll"); if (path.Length != 0) { _assemblies[i] = path; GUI.FocusControl(null); } } if (GUILayout.Button("Delete", EditorStyles.miniButtonRight, GUILayout.Width(50))) { _assemblies.RemoveAt(i); GUI.FocusControl(null); } GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add", EditorStyles.miniButton, GUILayout.Width(50))) { _assemblies.Add(""); } GUILayout.EndHorizontal(); GUILayout.EndScrollView(); GUILayout.EndVertical(); } #endregion #region Code GUILayout.BeginHorizontal("AC BoldHeader"); _isShowCode = EditorGUILayout.Foldout(_isShowCode, "Code", true); GUILayout.EndHorizontal(); if (_isShowCode) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Clear Code", EditorStyles.miniButtonLeft)) { _code = ""; GUI.FocusControl(null); } if (GUILayout.Button("Clear Console", EditorStyles.miniButtonRight)) { Type logEntries = EditorGlobalTools.GetTypeInEditorAssemblies("UnityEditor.LogEntries"); MethodInfo clearMethod = logEntries.GetMethod("Clear", BindingFlags.Static | BindingFlags.Public); clearMethod.Invoke(null, null); GUI.FocusControl(null); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); _scrollCode = GUILayout.BeginScrollView(_scrollCode, "TextField"); _code = EditorGUILayout.TextArea(_code, EditorGlobalTools.Styles.Label); GUILayout.EndScrollView(); } #endregion #region Execute GUILayout.BeginHorizontal(); GUI.enabled = _code != ""; if (GUILayout.Button("Execute", EditorGlobalTools.Styles.LargeButton)) { DynamicExecute(); } GUI.enabled = true; GUILayout.EndHorizontal(); #endregion }
/// <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(); } }
/// <summary> /// 任务点GUI事件处理 /// </summary> private void OnPointEventHandle() { if (_currentContent != null && Event.current != null) { Vector2 mousePosition = Event.current.mousePosition; switch (Event.current.type) { case EventType.MouseDown: if (Event.current.button == 1) { GenericMenu gm = new GenericMenu(); gm.AddItem(new GUIContent("<New Task Point Script>"), false, () => { NewTaskPointScript(); }); List <Type> types = GlobalTools.GetTypesInRunTimeAssemblies(); for (int i = 0; i < types.Count; i++) { Type type = types[i]; if (type.IsSubclassOf(typeof(TaskPointBase))) { string contentName = type.FullName; TaskPointAttribute attri = type.GetCustomAttribute <TaskPointAttribute>(); if (attri != null) { contentName = attri.Name; } gm.AddItem(new GUIContent("Add Task Point/" + contentName), false, () => { AddPoint(type, mousePosition); }); } } EditorGlobalTools.BeginNoRepeatNaming(); for (int i = 0; i < _currentContent.Points.Count; i++) { TaskPointBase point = _currentContent.Points[i]; gm.AddItem(new GUIContent(EditorGlobalTools.GetNoRepeatName("Find Task Point/" + point.Name)), false, () => { FindPoint(point); }); } gm.ShowAsContext(); } break; case EventType.MouseDrag: if (Event.current.button == 2) { for (int i = 0; i < _currentContent.Points.Count; i++) { _currentContent.Points[i].OnDrag(Event.current.delta); } GUI.changed = true; } break; } for (int i = 0; i < _currentContent.Points.Count; i++) { _currentContent.Points[i].OnPointEventHandle(Event.current, _currentContent); } } }