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
相关产品推荐
相关产品推荐

