绘制OnGUI时出现问题

时间:2015-10-08 14:45:14

标签: c# unity3d mouseevent

尝试在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作为替代但同样的问题。

1 个答案:

答案 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...
}