尝试在GUI上绘制纹理时遇到问题。这是OnGUI()
中的错误代码段:
var e = Event.current;
if (e.type == EventType.mouseDown)
{
Debug.Log("Mouse pressed");
GUI.DrawTexture(new Rect(e.mousePosition.x, e.mousePosition.y, 100, 110), ButtonTexture);
}
我成功获取日志输出但没有绘制纹理。但是,如果我在if
语句之外使用它,纹理会跟随我的鼠标而没有任何问题。我已经搞乱了两个小时,但似乎无法弄清楚出了什么问题。任何帮助将不胜感激。
编辑:如果条件是一个事件,似乎任何类型的绘图都不起作用,但标准if(1>0)
没有问题。我也尝试使用Input.GetMouseDown
作为替代但同样的问题。
答案 0 :(得分:1)
我认为这可能是因为每次点击鼠标都会触发一次mouseDown。
Event.Current将显示正在处理的当前事件,每帧可能有许多不同的事情,因此在调用OnGUI之间,这可能会发生变化。
更好的方法是在发生mousedown事件时存储并跟踪它是否已发布,您可以通过检查Event.Current或此Input.GetMouseButtonDown来解决此问题。
以下是使用Event.Current跟踪鼠标是否已关闭的简短示例。
bool isMouseDown = false;
void OnGUI()
{
EventType currentEventType = Event.current.type;
if (currentEventType == EventType.MouseDown)
{
isMouseDown = true;
}
else if (currentEventType == EventType.MouseUp)
{
isMouseDown = false;
}
//Use isMouseDown as appropriate...
}