C# Unity3D:检测鼠标是否单击了UI元素?

C# Unity3D:检测鼠标是否单击了UI元素?,c#,unity3d,user-interface,C#,Unity3d,User Interface,这是一个非常简单的问题,但在上个版本中,Unity似乎发生了一些变化。我在互联网上找到的答案不再有效,所以这里什么都没有: 我得到了一些UI元素和一个“InputController”类,该类用于在游戏期间处理用户输入(控制器上的输入通过onclick事件处理) 我正在寻找的是一种能够知道鼠标是否在单击UI元素以阻止输入处理执行的方法(并避免用户在游戏执行“左键单击”时单击“暂停”) 现在,我喜欢的大多数解决方案都有点凌乱,或者使用了EventSystem.current.IsPointerOv

这是一个非常简单的问题,但在上个版本中,Unity似乎发生了一些变化。我在互联网上找到的答案不再有效,所以这里什么都没有:

我得到了一些UI元素和一个“InputController”类,该类用于在游戏期间处理用户输入(控制器上的输入通过onclick事件处理)

我正在寻找的是一种能够知道鼠标是否在单击UI元素以阻止输入处理执行的方法(并避免用户在游戏执行“左键单击”时单击“暂停”)


现在,我喜欢的大多数解决方案都有点凌乱,或者使用了EventSystem.current.IsPointerOverGameObject()(比如,在写这个问题时显示的),它在2019.4中不再出现。因此,有什么新的方法可以做到这一点,我是否必须制作一些黑客解决方案来从UI接收事件,然后阻止代码的执行,或者我在这里遗漏了什么?

你应该研究像IPInterenterHandler和IPInterexitHandler这样的接口。如果你为自己实现这些接口r UI元素,您可以向这些接口所需的OnPointerEnter和OnPointerExit方法添加必要的代码


它应该像向InputController添加bool一样简单,例如
isInputEnabled
,并且只在输入为true时处理输入。将其设置为false OnPointerEnter和true OnPointerExit。

嘿,很抱歉回复太晚,但是生命(以及项目中的其他问题)挡道了。工作起来很有魅力,它足够干净,可以让我让所有UI类继承自它并统一行为。谢谢!不用担心。祝你好运!如果你的UI“元素”有几个子元素,你想知道单击了哪个子元素,你会如何处理?例如目录名和旁边的扩展图标?(在不创建将单行为附加到每个项的情况下——我们试图将代码整合到顶级对象)Patrick Q,根据实现的细节,您的问题可能有很多答案,因此我只能给您一个一般性的答案。您的顶级对象应该可以访问其子对象。当顶级对象处理用户交互时,您可以迭代子对象并查看其相关属性(即位置)来确定他们是否是用户交互的目标。当然有更好、更抽象的解决方案,但这取决于您的具体实现。