From 391beb75ea77dcfa4f8fbbd7ede5a5e18e8dfdd5 Mon Sep 17 00:00:00 2001 From: lrc <571244399@qq.com> Date: Fri, 26 Jun 2026 23:02:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A1=A8=E6=A0=BCeditor?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E5=AE=9A=E4=BD=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XTable/XericUIActionTableSceneEditor.cs | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/Editor/XTable/XericUIActionTableSceneEditor.cs b/Editor/XTable/XericUIActionTableSceneEditor.cs index 4dab4f4..a1bf9ef 100644 --- a/Editor/XTable/XericUIActionTableSceneEditor.cs +++ b/Editor/XTable/XericUIActionTableSceneEditor.cs @@ -73,17 +73,14 @@ namespace XericUIEditor.XTable float[] cw = table.ColWidths; if (rh == null || cw == null || rh.Length == 0 || cw.Length == 0) return; - // GetWorldCorners 返回世界坐标,topleft = corners[1] + // GetWorldCorners 返回世界坐标,topleft = corners[1], bottomRight = corners[3] Vector3[] corners = new Vector3[4]; tableRt.GetWorldCorners(corners); - Camera svCam = sceneView.camera; - Rect camRect = svCam.pixelRect; - - // 对 ScreenSpaceOverlay Canvas,世界坐标即屏幕像素坐标 - // 需要映射到 SceneView 本地 GUI 坐标 - Vector2 guiTL = ScreenToSceneViewGUI(corners[1], camRect); - Vector2 guiBR = ScreenToSceneViewGUI(corners[3], camRect); + // 使用 HandleUtility 将世界坐标投影到 Scene View GUI 坐标系 + // 自动处理相机缩放、平移、旋转——无论何种 Canvas 渲染模式都正确 + Vector2 guiTL = HandleUtility.WorldToGUIPoint(corners[1]); + Vector2 guiBR = HandleUtility.WorldToGUIPoint(corners[3]); float tableW = guiBR.x - guiTL.x; float tableH = guiBR.y - guiTL.y; @@ -112,15 +109,6 @@ namespace XericUIEditor.XTable Handles.EndGUI(); } - /// 屏幕坐标转 SceneView 本地 GUI 坐标 - private static Vector2 ScreenToSceneViewGUI(Vector2 screenPos, Rect camPixelRect) - { - return new Vector2( - screenPos.x - camPixelRect.x, - camPixelRect.yMax - screenPos.y - ); - } - #region 行标签 private static void DrawRowLabels(float[] rh, Rect tableRect,