You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity如何将EditorWindow定位到光标位置打开?

解决Unity EditorWindow打开时定位到光标位置的问题

我明白你遇到的问题了——Event.current.mousePosition确实坑人,它的坐标原点是当前鼠标所在的子窗口(比如Inspector、Project)的左上角,不是全局的主编辑器窗口坐标,直接用它设置窗口位置自然会偏移。

下面是靠谱的解决方案,核心是获取系统屏幕全局的鼠标位置,再转换为主编辑器窗口的内部坐标:

完整代码示例

using UnityEditor;
using UnityEngine;

public class MousePositionedWindow : EditorWindow
{
    [MenuItem("Window/Position at Mouse")]
    public static void ShowMousePositionedWindow()
    {
        var window = GetWindow<MousePositionedWindow>("Mouse-Aligned Window");
        // 延迟一帧设置,确保窗口初始化完成
        EditorApplication.delayCall += () => PositionWindowToMouse(window);
    }

    private static void PositionWindowToMouse(EditorWindow window)
    {
        // 1. 获取鼠标在系统屏幕上的全局坐标(原点为屏幕左上角)
        Vector2 globalMousePos = UnityEditorInternal.InternalEditorUtility.GetMouseScreenPosition();
        
        // 2. 获取Unity主编辑器窗口在系统屏幕上的位置
        Rect mainEditorWindowRect = EditorGUIUtility.GetMainWindowPosition();
        
        // 3. 计算鼠标相对于主编辑器窗口内部的坐标
        float relativeX = globalMousePos.x - mainEditorWindowRect.x;
        float relativeY = globalMousePos.y - mainEditorWindowRect.y;
        
        // 4. 保留窗口原有宽高,设置左上角到目标位置
        Rect newWindowRect = window.position;
        newWindowRect.x = relativeX;
        newWindowRect.y = relativeY;
        window.position = newWindowRect;
    }

    private void OnGUI()
    {
        GUILayout.Label("窗口已定位到鼠标位置!", EditorStyles.boldLabel);
    }
}

关键细节说明

  • 为什么不用Event.current.mousePosition?
    这个API的坐标空间是当前接收事件的子窗口的局部坐标,比如鼠标停在Inspector窗口时,它返回的是Inspector窗口内的相对位置,不是主编辑器窗口的全局位置,所以直接赋值会导致窗口跑到错误区域。

  • 为什么用EditorApplication.delayCall?
    刚创建窗口时,Unity可能还没完成窗口的初始化布局,延迟一帧设置能确保window.position的初始宽高是正确的,避免窗口被意外拉伸或缩小。

  • 坐标转换逻辑
    InternalEditorUtility.GetMouseScreenPosition()直接返回鼠标在系统屏幕上的绝对位置(原点是屏幕左上角,x向右、y向下);EditorGUIUtility.GetMainWindowPosition()获取主编辑器窗口在系统屏幕上的位置,用全局鼠标坐标减去主窗口的屏幕坐标,得到的就是鼠标在主编辑器窗口内部的相对位置,这正是EditorWindow.position需要的坐标空间。

内容的提问来源于stack exchange,提问作者rbjacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:15:21