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

Unity Screen Space-Overlay Canvas鼠标位置偏移问题求助

解决Screen Space-Overlay Canvas鼠标UI跟随偏移问题

核心解决方案

用Unity内置的RectTransformUtility.ScreenPointToLocalPointInRectangle方法,直接将屏幕鼠标坐标转换为Canvas内部的本地坐标,自动适配Canvas Scaler的所有缩放设置,代码示例如下:

public RectTransform canvasRect; // 拖拽场景中Canvas的RectTransform组件到这里
public RectTransform followUI;   // 需要跟随鼠标的UI元素的RectTransform

void Update()
{
    // Screen Space-Overlay模式下无需传入相机,直接传null
    if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
        canvasRect,
        Input.mousePosition,
        null,
        out Vector2 canvasLocalPos))
    {
        followUI.anchoredPosition = canvasLocalPos;
    }
}

为什么之前的方法无效

  • 直接除以scaleFactor或localScale只处理了缩放比例,但忽略了Canvas的原点偏移(Screen Space-Overlay的画布原点在左下角,而锚点居中的UI元素,其anchoredPosition是相对于画布中心的坐标,单纯缩放无法修正这个偏移)
  • ScreenToViewportPoint得到的是0-1的视口坐标,需要额外计算画布尺寸和偏移,步骤繁琐且容易出错

额外注意事项

  • 必须确保canvasRect引用的是Canvas对象的RectTransform,不是跟随UI的RectTransform
  • 目标UI的锚点设置为居中时,转换后的坐标可以直接赋值给anchoredPosition,无需额外调整
  • 无论你用Scale With Screen Size还是Constant Pixel Size模式,这个方法都会自动适配Canvas Scaler的参数,不需要强制使用特定参考分辨率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:15