如果我将鼠标光标悬停在UIContent上,它会显示按钮“+”。但是,按下它时代码不会执行。没有if(GUI.tooltip ==“1”)代码没问题。 那有什么不对?
GUI.Label(Rect(700, 200, 140, 20), GUIContent(
"test1: " + space + Static.globalTest1[qwqw], "1"));
if(GUI.tooltip == "1")
if(GUI.Button(Rect(800, 205, 50, 50), "+"))
{
level.addExp(qwqw, 50);
/// ...
}
Unity不会吐出任何编译错误。
答案 0 :(得分:1)
问题是工具提示系统有点奇怪。 GUI.tooltip实际上是在绘制控件时设置的。因此,负责设置当前工具提示的代码位于GUIStyle.Draw方法中。这意味着工具提示仅在重绘事件期间设置,并且仅在绘制控件之后设置。因此,您的按钮被绘制但未获得任何输入事件,因为在处理mousedown / mouse up事件时未设置工具提示。
您的下一个问题是您的按钮和标签重叠。这通常是一个问题,因为控件按照OnGUI中出现的顺序处理事件。第一个控件可能" eat"某些事件,以便以下控件不再处理它们。另一方面,可见性是相反的,因为最后绘制的控件将位于顶部。
另一个问题是,一旦您移过按钮(当您没有重叠时),自您离开标签区域后,工具提示将不再被设置。这可以通过向Button添加相同的工具提示来简单地解决。
要解决所有问题,您必须使用单独的变量来显示按钮。这应该是一个浮点数,所以你可以定义一点"超时"。这将确保按钮可见并在至少下一帧处理。只要您悬停标签或按钮,每帧都会重新触发超时变量并保持按钮可见。
var tooltipTimer = 0.0;
function OnGUI()
{
GUI.Label(Rect(700, 200, 140, 20), GUIContent( "test1: " + space + Static.globalTest1[qwqw], "1"));
if (tooltipTimer > 0 )
{
if (Event.current.type == EventType.Repaint)
tooltipTimer -= Time.deltaTime;
if(GUI.Button(Rect(800, 205, 50, 50), GUIContent("+", "1")))
{
level.addExp(qwqw, 50);
/// ...
}
}
if(GUI.tooltip == "1")
{
tooltipTimer = 1.0; // timeout 1 sec.
}
}