Unity3d 如何防止其他最顶级的游戏对象在堆叠的游戏对象中接收单击事件

Unity3d 如何防止其他最顶级的游戏对象在堆叠的游戏对象中接收单击事件,unity3d,onclick,gameobject,Unity3d,Onclick,Gameobject,我有一个带有BoxCollider2D的对象,它位于带有BoxCollider的对象下面。(详细信息是一个UI(我使用NGUI资产),其中一个BoxCollider位于一个GameObject上,另一个BoxCollider2D)。UI对象有一个实现OnClick()的脚本,GameObject有一个实现OnMouseDown()的脚本。当我单击UI对象时,也单击从游戏对象触发的事件 我只想在UI对象相互堆叠时触发事件。如何实现这一点?包括使用UnityEngine.EventSystems在O

我有一个带有
BoxCollider2D
的对象,它位于带有
BoxCollider
的对象下面。(详细信息是一个UI(我使用NGUI资产),其中一个
BoxCollider
位于一个
GameObject
上,另一个
BoxCollider2D
)。UI对象有一个实现
OnClick()
的脚本,
GameObject
有一个实现
OnMouseDown()
的脚本。当我单击UI对象时,也单击从
游戏对象触发的事件


我只想在UI对象相互堆叠时触发事件。如何实现这一点?

包括使用
UnityEngine.EventSystems
OnMouseDown()
函数中,添加
if(!EventSystem.current.IsPointerOverGameObject())
然后将鼠标按下时假定运行的所有代码放入
if
语句中

using UnityEngine.EventSystems;
public void OnMouseDown()
{
 if (!EventSystem.current.IsPointerOverGameObject())
 {
  //Put all your code for your gameobject here
 }
}

这应该行得通,但如果不行,请观看视频了解其他方法。

当您说UI元素使用OnClick()时,您的意思是它是一个按钮对象,对吗?是的,它实际上是一个来自NGUI Library的UI按钮。您现在无法实际使用“NGUI”。改为普通的统一界面。刚刚意识到你使用了NGUI。我的解决方案是统一用户界面。现在没有理由使用NGUI,因为Unity new UI经过优化,可以做NGUI可以做的事情,甚至更多。是的,实际上我正在进行外包,NGUI库是以前安装的,因此我不得不继续使用它。EventSystem解决方案在NGUI上不起作用,但非常感谢您的支持:他们对我在编写if条件时没有使用感叹号的误解表示抱歉。非常感谢您的解决方案!如果您有一个客户机有一个使用NGUI的非常旧的项目,只需单击“删除”并在普通UI中执行即可。如果它被弃用了,它就被弃用了你知道吗?没有理由浪费自己或自己的时间@JoeBlow我想告诉他,但相信我,有些客户疯得要命,希望一切都按他们的方式进行,即使这是错误的。遇到一个人,他想让我用OnGUI完成他们的工作。。。。。