C# 调试事件为;“用过的”;在Unity 3D中

C# 调试事件为;“用过的”;在Unity 3D中,c#,debugging,events,unity3d,C#,Debugging,Events,Unity3d,我正在处理的项目的用户界面有问题。它涉及“节点”并将它们连接在一起。我将两个节点连接在一起,即按下初始节点上的按钮,然后单击另一个节点以连接到它。后半部分是通过检查whenEvent.current.type==EventType.MouseDown然后将初始节点与上次悬停的节点连接起来实现的 这在大多数情况下都可以正常工作,但我注意到,有时当您单击另一个节点时,它不会立即将它们连接在一起,而是直到您单击该节点的另一个节点。在执行Debug.Log(Event.current.type)之后,它

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

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

以下是控制台输出行为的两个GIF:

问题代码:

private bool detectEscape()
{
    Debug.Log(Event.current.type);
    return (Event.current.type == EventType.MouseDown);
}
由于事件有时被“使用”,此函数有时在鼠标单击时返回False。它在GUI中被调用

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

我是否正确使用事件系统

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


否则,知道在Unity 3D的源代码中设置断点的方法吗?这样我就可以在函数
事件中设置断点。使用()
并确定耗用鼠标事件的是什么?

大概您是在某个地方从OnGUI调用detectEscape,对吗?当前事件仅在OnGUI期间有效。此外,可以使用不同的当前事件在每帧中多次调用OnGUI。有时事件类型可能是重新绘制,有时可能是MouseDown,有时可能是其他类型。因此,如果事件类型不是MouseDown,则不希望假定鼠标未按下;鼠标可能仍在按下,但可能会发生另一个事件。

添加源代码很好。但是在这里添加相关的代码作为简短的代码片段也是非常感谢的。并不是每个人都想/都有时间浏览你的所有源代码。另外,外部链接可能会中断,在github的情况下,未来的更改可能会使它在这个特定问题的上下文中无法使用,因此,将相关代码放入问题本身的规则谢谢。好的观点。编辑更好?调试Event.current.type,然后返回一个新值?我正在将类型打印到控制台,然后将其与MouseDown事件进行比较。问题是,当我单击时,函数应该返回True,但有时不是。如果我去掉
Debug.Log
行,问题仍然存在。您的回答帮助我解决了这个问题。你没有假设鼠标可能不会落下,这是对的。我认为问题可能是事件系统在重新绘制/渲染期间更新当前事件,因此会覆盖鼠标按下事件。我最终解决这个问题的方法是在draw函数的开头捕获
Event.current.type
,然后将其全局应用于所有节点,等等。