diff --git a/Scripts/Editor/NodeEditorAction.cs b/Scripts/Editor/NodeEditorAction.cs index 920c1dc..40bea2f 100644 --- a/Scripts/Editor/NodeEditorAction.cs +++ b/Scripts/Editor/NodeEditorAction.cs @@ -227,7 +227,7 @@ namespace XNodeEditor { // Open context menu for auto-connection else if (NodeEditorPreferences.GetSettings().dragToCreate && autoConnectOutput != null) { _menuPopupWindow.OnCloseA = _releaseDraggedConnection; - + _menuPopupWindow.OpenBeforeMousePos = e.mousePosition; PopupWindow.Show(new Rect(Event.current.mousePosition, Vector2.zero),_menuPopupWindow); } @@ -286,6 +286,7 @@ namespace XNodeEditor { e.Use(); // Fixes copy/paste context menu appearing in Unity 5.6.6f2 - doesn't occur in 2018.3.2f1 Probably needs to be used in other places. } else if (!IsHoveringNode) { autoConnectOutput = null; + _menuPopupWindow.OpenBeforeMousePos = e.mousePosition; PopupWindow.Show(new Rect(Event.current.mousePosition, Vector2.zero),_menuPopupWindow); } } diff --git a/Scripts/Editor/NodeGraphEditor.cs b/Scripts/Editor/NodeGraphEditor.cs index 92e13e6..a7adf05 100644 --- a/Scripts/Editor/NodeGraphEditor.cs +++ b/Scripts/Editor/NodeGraphEditor.cs @@ -8,6 +8,7 @@ using UnityEngine; namespace XNodeEditor { public class MenuPopupWindow : PopupWindowContent { + public Vector2 OpenBeforeMousePos; private SearchField _search; private MenuTreeView _menuTree; public Action OnCloseA; @@ -293,13 +294,18 @@ namespace XNodeEditor { if (string.IsNullOrEmpty(path)) continue; menu.AddItem(path, () => { + pos = NodeEditorWindow.current.WindowToGridPosition(menu.OpenBeforeMousePos); XNode.Node node = CreateNode(type, pos); NodeEditorWindow.current.AutoConnect(node); }); } // menu.AddSeparator(""); if (NodeEditorWindow.copyBuffer != null && NodeEditorWindow.copyBuffer.Length > 0) - menu.AddItem("Paste", () => NodeEditorWindow.current.PasteNodes(pos)); + menu.AddItem("Paste", () => + { + pos = NodeEditorWindow.current.WindowToGridPosition(menu.OpenBeforeMousePos); + NodeEditorWindow.current.PasteNodes(pos); + }); // else menu.AddDisabledItem(new GUIContent("Paste")); menu.AddItem("Preferences", () => NodeEditorReflection.OpenPreferences()); menu.AddItem("创建所有的节点 ---> 测试用", () => @@ -308,7 +314,9 @@ namespace XNodeEditor { { return; } - + + pos = NodeEditorWindow.current.WindowToGridPosition(menu.OpenBeforeMousePos); + for (int i = 0; i < NodeEditorReflection.nodeTypes.Length; i++) { Type type = NodeEditorReflection.nodeTypes[i];