绘制OnGUI时的问题

本文关键字:问题 OnGUI 绘制 | 更新日期: 2023-09-27 18:16:36

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

绘制OnGUI时的问题

我认为这可能是因为mouseDown是触发一次鼠标点击。

事件。Current将显示正在处理的当前事件,每帧可能有许多不同的事情,所以在调用OnGUI之间,这可能会改变。

一个更好的方法是存储mousedown事件发生的时间,并一直跟踪直到它被释放,您可以通过检查event来实现这一点。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...
}