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

