Unity 3D 中的调试事件为 "used"

Debug Event being "used" in Unity 3D

我正在处理的项目的用户界面有问题。它涉及 "nodes" 并将它们连接在一起。我将两个节点连接在一起,只需按下初始节点上的按钮,然后单击另一个节点即可连接到它。后半部分是通过检查 when Event.current.type == EventType.MouseDown 然后将初始节点与您上次悬停的节点连接来实现的。

这在大多数情况下工作正常,但我注意到有时当您单击另一个节点时,它不会立即将它们连接在一起,而是在您单击离开该节点之前。在执行 Debug.Log(Event.current.type) 之后,它显示有时当我单击时事件出现为 "used",而不是 "mouseDown",因此在我单击其他地方之前不会执行连接代码。它似乎只发生在某些节点上。

这是控制台输出行为的两个 gif:

问题代码:

private bool detectEscape()
{
    Debug.Log(Event.current.type);
    return (Event.current.type == EventType.MouseDown);
}

由于事件有时 "used",此函数有时会在单击鼠标时返回 False。它在 GUI 中被调用。

知道导致使用当前事件的任何原因吗?我在我的代码中的许多地方进行了类似上面的比较。这可能是导致使用当前事件的原因吗?我该如何避免?

我是否正确使用了事件系统?

知道捕获鼠标点击的更好方法吗?不幸的是,使用 Input.GetMouseButtonDown(0) 不是一个选项,因为它仅在游戏为 运行 时有效,并且该程序旨在作为编辑器的扩展。

否则,知道在 Unity 3D 的源代码中放置一个断点的方法,以便我可以在函数中放置一个断点 Event.Use() 并确定什么在消耗鼠标事件吗?

你大概是在某处从 OnGUI 调用 detectEscape 吧?当前事件仅在 OnGUI 期间有效。此外,OnGUI 可以每帧多次调用,具有不同的当前事件。有时事件类型可能是 Repaint,有时可能是 MouseDown,有时可能是其他类型。因此,如果事件类型不是 MouseDown,则您不想假设鼠标没有按下;鼠标可能仍处于按下状态,但可能正在发生不同的事件。