Input.mousePosition;
赋值给 UI transform。您需要使用RectTransformUtility.ScreenPointToLocalPointInRectangle
将鼠标位置和画布转换为UI可以理解的适当位置。Canvas.transform.TransformPoint(result)
获取应分配给 UI/面板位置的鼠标最终位置。public Canvas parentCanvas;
public void Start()
{
Vector2 pos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
parentCanvas.transform as RectTransform, Input.mousePosition,
parentCanvas.worldCamera,
out pos);
}
public void Update()
{
Vector2 movePos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
parentCanvas.transform as RectTransform,
Input.mousePosition, parentCanvas.worldCamera,
out movePos);
transform.position = parentCanvas.transform.TransformPoint(movePos);
}
Cursor.visible = false;
禁用光标,然后使用另一个带有光标图标的图像作为光标。public Canvas parentCanvas;
public RawImage mouseCursor;
public void Start()
{
Cursor.visible = false;
}
public void Update()
{
Vector2 movePos;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
parentCanvas.transform as RectTransform,
Input.mousePosition, parentCanvas.worldCamera,
out movePos);
Vector3 mousePos = parentCanvas.transform.TransformPoint(movePos);
//Set fake mouse Cursor
mouseCursor.transform.position = mousePos;
//Move the Object/Panel
transform.position = mousePos;
}
最后,你会注意到我没有直接使用Input.mousePosition
来设置UI位置。不要使用它。原因是当你改变Canvas RenderMode并分配摄像头时,Input.mousePosition
将无法工作,但RectTransformUtility.ScreenPointToLocalPointInRectangle
的解决方案应该可行。
Unity 2021 - 针对所有对于在2021年中希望有一个跟随鼠标位置的工具提示(Unity GUI)感兴趣的人。
上面发布的使用 RectTransformUtility 的解决方案不起作用,或者它取决于一些在帖子中缺失的画布设置细节。
在 Unity 2021 中有效的方法是:
画布设置:
工具提示是一个简单的UI对象(面板或其他),作为画布的子元素,具有以下设置:
并且附有以下附加的脚本:tooltip_rect_transform_ref.anchoredPosition = Input.mousePosition / tooltip_parent_canvas.transform.localScale.x;
在编辑器和构建版本中都能正常工作,适用于不同的分辨率。
我重新挖掘这个问题,因为今天我也有同样的问题。
关于@zizu_zaza提出的解决方案,它没有考虑到不同的纵横比(至少当Canvas Scaler屏幕匹配比率不为1.0或0.0时)。仅通过画布缩放来缩放鼠标位置仅适用于相同方面的不同分辨率。
要考虑鼠标位置缩放中的分辨率和纵横比,请执行以下操作:
Vector2 mergedFactors = new Vector2(
(canvas.transform as RectTransform).sizeDelta.x / Screen.width,
(canvas.transform as RectTransform).sizeDelta.y / Screen.height);
//x and y -> *= (RefX/ScreenWidth) * (CanvasWidth/RefX)
tooltip.anchoredPosition = mousePos * mergedFactors;
//Short maths explanation:
//CanvasScaler scaler = GetComponentInParent<CanvasScaler>();
//Vector2 scaleFactors = new Vector2(
// scaler.referenceResolution.x / Screen.width,
// scaler.referenceResolution.y / Screen.height);
//Vector2 aspectFactors = new Vector2(
// (canvas.transform as RectTransform).sizeDelta.x / scaler.referenceResolution.x,
// (canvas.transform as RectTransform).sizeDelta.y / scaler.referenceResolution.y);
//Vector2 mergedFactors = scaleFactors * aspectFactors
//
//->scale reference resolution by actual screen resolution
//->scale canvas "size" (which adjusts to aspect) by reference resolution
//->combine both: reference resolution multi & div cancel out
这将允许工具提示(或任何其他UI对象)在任何分辨率和纵横比下跟随鼠标。