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。但是如果我单击编辑器窗口中的其他任何位置,它就会更新。
如果你知道为什么会发生这种情况,我很想听听你的想法!任何和所有的帮助将不胜感激!
检测某人单击鼠标左键的另一种方法是使用更新函数中的 Input.GetKeyDown 函数,如下所示:
void Update(){
if (Input.GetKeyDown(KeyCode.Mouse0)){
Debug.Log("Left mouse button clicked.");
}
}
我希望这是有帮助的!