#if UNITY_EDITOR namespace SkillEditor { using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using Sirenix.OdinInspector.Editor; using Sirenix.OdinInspector; using Sirenix.Utilities.Editor; using Sirenix.Utilities; using System.Linq; using DG.DOTweenEditor; public class SkillEditorWindow : OdinMenuEditorWindow { [MenuItem("Tools/*SkillEditor _F12", false, (int)NLDMenuID.SkillEditor)] private static void OpenWindow() { var window = GetWindow(); window.titleContent = new GUIContent("技能编辑器"); // Nifty little trick to quickly position the window in the middle of the editor. window.position = GUIHelper.GetEditorWindowRect().AlignCenter(700, 700); } protected override OdinMenuTree BuildMenuTree() { SkillEditorDataManager.instance.LoadDatas(); SkillEditorDataManager.instance.isInEdit = false; SkillEditorDataManager.instance.editorWindow = this; Debug.Log("执行一次BuildMenuTree"); var innerUISkill = ScriptableObject.CreateInstance(); SkillEditorDataManager.instance.innerUISkill = innerUISkill; var tree = new OdinMenuTree(true); tree.DefaultMenuStyle.IconSize = 28.00f; tree.Config.DrawSearchToolbar = true; tree.Add(SkillEditorDefine.TITLE_SKILL, innerUISkill); var skillList = SkillEditorDataManager.instance.skillList; Debug.Log("总共:" + skillList.Count + "个"); for (var i = 0; i < skillList.Count; ++i) { var skillData = skillList[i]; var combieName = "ID:" + skillData.skillId + "|" + skillData.skillName; tree.AddMenuItemAtPath(SkillEditorDefine.TITLE_SKILL, new OdinMenuItem(tree, combieName, skillData)); } // tree.Add(SkillEditorDefine.TITLE_BULLET, null); // tree.Add(SkillEditorDefine.TITLE_BUFF, null); return tree; } private OdinMenuItem _lastSelectItem; protected override void OnBeginDrawEditors() { var selected = this.MenuTree.Selection.FirstOrDefault(); if (selected != _lastSelectItem) { _lastSelectItem = selected; _OnSelectChanged(); } var toolbarHeight = this.MenuTree.Config.SearchToolbarHeight; SirenixEditorGUI.BeginHorizontalToolbar(toolbarHeight); { if (selected != null) { var rawValue = selected.Value; if (rawValue == null) { // 未选中 } else if (rawValue is EditorSkillInnerUI) { // 选中的title GUILayout.Label(selected.Name); //if (SirenixEditorGUI.ToolbarButton("创建技能")) //{ //} } else if (rawValue is EditorSkillData) { // 选中的对象 GUILayout.Label("技能: " + selected.Name); //if (SkillEditorDataManager.instance.isChanged) //{ // if (SirenixEditorGUI.ToolbarButton("保存")) // { // // 保存 // _OnClickSave(); // } //} //if (SirenixEditorGUI.ToolbarButton("删除")) //{ // // 弹窗提示 // _OnClickDelete(); //} } } } SirenixEditorGUI.EndHorizontalToolbar(); } private void _OnClickDelete() { // 删除数据 var skillData = SkillEditorDataManager.instance.clickSkillData; SkillEditorDataManager.instance.RemoveSkillData(skillData); // 删除menuItem _lastSelectItem.Remove(); } private void _OnClickSave() { // 保存数据 var skillData = SkillEditorDataManager.instance.clickSkillData; SkillEditorDataManager.instance.EditSkillData(skillData); SkillEditorDataManager.instance.isChanged = false; // 更新menuItem _lastSelectItem.Name = "ID:" + skillData.skillId + "|" + skillData.skillName; } private void _OnSelectChanged() { if (_lastSelectItem == null) { return; } var rawValue = _lastSelectItem.Value; if (rawValue == null || rawValue is EditorSkillInnerUI) { // 选中的title SkillEditorDataManager.instance.isInEdit = false; } else if (rawValue is EditorSkillData) { // 选中的对象 SkillEditorDataManager.instance.isInEdit = true; SkillEditorDataManager.instance.isChanged = false; SkillEditorDataManager.instance.clickSkillData = rawValue as EditorSkillData; } } } } #endif