Unity - 编辑器窗口中的事件当前未更新

本文关键字:更新 事件 编辑器 窗口 Unity | 更新日期: 2023-09-27 18:33:23

所以我正在开发一个自定义编辑器窗口,并试图获取用户何时单击鼠标左键。我遇到的问题是,每当我单击放置的GUI元素(在本例中为EditorGUI.Foldout元素(时,Event.current都不会更新。因此,当我尝试检查用户是否单击鼠标左键时,它不会在应该单击时执行任何操作。但是,如果我不单击该区域,它会检测到它!

所以我要问你的问题是,我到底在这里做错了什么?我正在收集 Event.current 在 void OnGUI(( 的第一行,而不是其他地方。我将添加一些代码片段,希望有助于找到解决方案!

我称之为 Event.Current 的地方:

void OnGUI()
{
    Event currentEvent = Event.current;
    ...
}

当我尝试访问 Event.Current 时:

void OnGUI()
{
    ...
    Rect baseLabelRect = new Rect();
    baseLabelRect.x = 0;
    baseLabelRect.y = 21;
    baseLabelRect.width = this.position.width;
    baseLabelRect.height = 16;
    if (selected)
        EditorGUI.DrawRect(baseLabelRect, selectedItemColor);
    EditorGUI.indentLevel = 1;
    GUI.contentColor = Color.black;
    GUI.backgroundColor = Color.grey;
    itemListFoldout[0] = EditorGUI.Foldout(baseLabelRect, itemListFoldout[0], "Fouldout test");
    GUI.contentColor = origContentColor;
    GUI.backgroundColor = origBackgroundColor;
    if (currentEvent.button == 0 && currentEvent.isMouse)
    {
        Debug.Log("left mouse button clicked");
        if (baseLabelRect.Contains(currentEvent.mousePosition))
        {
            selected = true;
            Debug.Log("rect clicked");
        }
        else
            selected = false;
    }
}

这就是我目前遇到麻烦的地方。每当我单击EditorGUI.Foldout所在的区域时,都应该检测到它并设置为选择。但是每当我单击折叠区域时,它似乎都不会更新 Event.current。但是如果我单击编辑器窗口中的其他任何位置,它就会更新。

如果你知道为什么会发生这种情况,我很想听听你的想法!任何和所有的帮助将不胜感激!

Unity - 编辑器窗口中的事件当前未更新

检测某人单击鼠标左键的另一种方法是使用更新函数中的 Input.GetKeyDown 函数,如下所示:

void Update(){
    if (Input.GetKeyDown(KeyCode.Mouse0)){
        Debug.Log("Left mouse button clicked.");
    }
}

我希望这是有帮助的!