调试事件在Unity 3D中“使用”

时间:2015-01-11 02:54:36

标签: c# debugging events unity3d

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

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

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

Short demo

Longer demo

问题代码:

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

由于事件有时被“使用”,此函数有时会在鼠标点击时返回False。它在GUI中调用。

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

我是否正确使用了Event系统?

了解捕获鼠标点击的更好方法?不幸的是,使用Input.GetMouseButtonDown(0)不是一个选项,因为它只在游戏运行时才有效,而且这个程序是编辑器的扩展。

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

1 个答案:

答案 0 :(得分:1)

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