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

Unity C#实现GUI.Label绘制到鼠标位置的方法咨询

解答:在鼠标位置绘制GUI.Label的实现方法

没问题!当然可以把GUI.Label绘制在鼠标位置,我帮你修正并完善你的Unity C#脚本,同时解释关键细节:

先修正你脚本里的小问题

你当前OnGUI方法里的if(Hover = true)是赋值操作,不是判断条件,这会导致Hover一直被设为true,应该改成判断相等的==,或者更简洁的直接判断变量本身:

if(Hover) // 等价于 if(Hover == true)

鼠标位置的坐标转换

Unity里Input.mousePosition的原点是屏幕左下角,但GUI系统的原点是屏幕左上角,所以需要把鼠标的Y轴坐标转换一下,公式是:

float guiMouseY = Screen.height - Input.mousePosition.y;

完整的修正后脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {
    public bool Hover = false;
    // 可以自定义Label的偏移,避免完全贴住鼠标挡住内容
    public Vector2 labelOffset = new Vector2(10, 10);

    void OnMouseOver() {
        Hover = true;
    }

    void OnMouseExit() {
        Hover = false;
    }

    void OnGUI() {
        if(Hover) {
            // 转换鼠标坐标到GUI坐标系,加上偏移量
            float mouseX = Input.mousePosition.x + labelOffset.x;
            float mouseY = Screen.height - Input.mousePosition.y + labelOffset.y;
            // 创建Label的显示区域,第二个参数是要显示的文本内容
            GUI.Label(new Rect(mouseX, mouseY, 200, 30), "鼠标悬停提示内容");
        }
    }
}

额外优化建议

  • 如果你希望Label不会超出屏幕边界,可以对mouseX和mouseY做边界判断,比如限制mouseX不超过Screen.width - 200(200是Label的宽度),mouseY不超过Screen.height - 30(30是Label的高度)。
  • 如果你的项目用的是UGUI而非旧版IMGUI,可以考虑用Canvas下的Text组件配合RectTransformUtility.ScreenPointToLocalPointInRectangle实现更灵活的跟随效果,但你的脚本基于IMGUI,上面的方案完全适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:46:22