我的项目设置如下:
主摄像头
帆布
阻挡面具:没什么
2个对象设置:
GameObject
精灵渲染器
Rigidbody 2D
Circle Collider 2D
(我的GO脚本)
UI
图像
按钮
(我的用户界面脚本)
在我的GO和UI脚本中,我添加了OnPointerEnter事件。并且两者都可以自行完成。我可以收到OnPointerEnter事件。
但是当我使用关节拖动GO对象并移动到UI对象的顶部时。我的UI对象OnPointerEnter被GO阻止。我无法收到UI OnPointerEnter事件。
我在网上搜索,每个人都要求在GO上阻止光线投射到UI。但我需要相反,我希望GO和UI都接收OnPointerEnter事件,无论它们是否重叠。任何提示?
P.S。在2D版本,GameObject块UI对象中的这样的东西。但我仍然希望收到UI Object OnPointerEnter。
答案 0 :(得分:1)
最后得到我想要的东西。现在我有两个解决方案:
<强> 1。使用OnTriggerEnter2D
<强> 2。拖动GO
时关闭Physics2DRaycaster LayerMask GO使用此代码:
using UnityEngine.EventSystems;
public void turnOffLayerMask(string layerMaskName)
{
Physics2DRaycaster p2drc = Camera.main.GetComponent();
LayerMask layerMask = p2drc.eventMask;
LayerMask disableLayerMask = 1 << LayerMask.NameToLayer(layerMaskName);
p2drc.eventMask = layerMask & ~disableLayerMask;
}
public void turnOnLayerMask(string layerMaskName)
{
Physics2DRaycaster p2drc = Camera.main.GetComponent();
LayerMask layerMask = p2drc.eventMask;
LayerMask enableLayerMask = 1 << LayerMask.NameToLayer(layerMaskName);
p2drc.eventMask = layerMask | enableLayerMask;
}
拖动GO时关闭GO layerMask。拖动结束时打开。光线投射可以通过GO到UI并接收OnPointerXXX事件。
我认为EventSystem是自动的。选择EITHER Physical raycast或Graphic raycast来检测GO / UI对象。因此,您只能接收一组事件(非UI / UI)。这是对的吗? 我似乎在网上搜索并且许多人使用OnMouseXXX(或其他方法)而不是Event系统(即OnPointerXXX)。因此,他们可以“触摸”GO到UI。