Events unity 2D触碰事件被某物阻止

Events unity 2D触碰事件被某物阻止,events,canvas,unity3d,gameobject,Events,Canvas,Unity3d,Gameobject,我的项目设置如下: 主摄像机 物理二维光线投射器 事件掩码:一切 帆布 图形光线投射器 阻止对象:无 遮罩:没什么 2对象设置: 游戏对象 精灵渲染器 刚体2D 圆对撞机2D (我的围棋脚本) 用户界面 形象 钮扣 (我的UI脚本) 在GO和UI脚本中,我都添加了OnPointerNet事件。两种方法都能很好地独立工作。我可以接收OnPointerEnter事件 但当我使用关节拖动GO对象并移动到UI对象的顶部时。我的UI对象OnPointReferer被GO阻止。我无法接收UI

我的项目设置如下:

主摄像机

  • 物理二维光线投射器
  • 事件掩码:一切
帆布

  • 图形光线投射器
  • 阻止对象:无
遮罩:没什么

2对象设置:

  • 游戏对象

    • 精灵渲染器

    • 刚体2D

    • 圆对撞机2D

    • (我的围棋脚本)

  • 用户界面

    • 形象

    • 钮扣

    • (我的UI脚本)

  • 在GO和UI脚本中,我都添加了OnPointerNet事件。两种方法都能很好地独立工作。我可以接收OnPointerEnter事件


    但当我使用关节拖动GO对象并移动到UI对象的顶部时。我的UI对象OnPointReferer被GO阻止。我无法接收UI OnPointReferer事件

    我在网上搜索,每个人都要求阻止raycast进入用户界面。但我需要的是相反的,我希望GO和UI都接收OnPointerEnter事件,无论它们是否重叠。有什么提示吗

    注:在2D版本中,类似这样的东西,游戏对象块UI对象。但我仍然希望在PointReferer上接收UI对象


    终于得到我想要的了。现在我有两个解决方案:

  • 使用OnTiggerEnter2D
  • 在拖动GO时禁用Physics2DRaycaster LayerMask GO
  • 1。使用OnTiggerEnter2D

  • 当拖走的时候。将事件拍摄到UI,并告知正在拖动哪个GO
  • 在UI对象中添加rigibody2D(IsKinetic和Freeze xyz)和2Dcollider(is触发器)作为组件
  • OnTiggerEnter2D接收我的GO碰撞器,并检查它是否是拖动GO。(这样做是因为我非常希望UI获得我唯一的拖动GO)
  • 2。在拖动GO时关闭Physics2DRaycaster LayerMask GO

  • 使用此代码:
    
    使用UnityEngine.EventSystems;
    公共无效关闭LayerMask(字符串LayerMask名称)
    {
    Physics2DRaycaster p2drc=Camera.main.GetComponent();
    LAYERMAK LAYERMAK=p2drc.eventMask;
    
    LayerMask disableLayerMask=1“我的UI对象已被指针引用程序阻止”我想你应该解释一下。会发生什么?它阻止了什么?这是否意味着
    OnPointerEnter
    仅适用于GO和UI?为什么不在拖动开始后立即禁用另一个呢?这是一个非常有趣的问题!你想让touch同时访问你的.UI和游戏对象……这是正确的吗?你基本上是想拖动一个对象吗将场景中的对象(例如“机器人”)拖到.UI中的拖动目标上?如果是-太棒了。GO和UI OnPointerNet都是自己工作的。我使用关节拖动GO,因此它有一些移动延迟来“追”回我的指针。因此,如果我“缓慢”拖动GO并进入UI,则没有收到来自UI的OnPointerNet。如果我“快速”拖动GO指针在开始“追逐”和“阻止”指针和UI之间的指针之前快速进入UI。UI OnPointerNet收到。下面是我所说的“blcoked”.嗨,乔,我没有很好的代码来执行你的步骤4iii。我拍摄事件,并在每次拖动时告诉用户界面拖动开始位置。我认为事件的拍摄频率太高,使我的游戏滞后。我不知道我的解决方案脏的或干净的。希望我能找到一个干净的解决方案。这似乎很奇怪,它会延迟你的游戏。我会在有机会的时候尝试。你有没有尝试过为uI使用一个完全不同的摄像头?这通常是个好主意。该死!看起来Unity不允许“多物理raycaster系统”.我很高兴你找到了某种解决办法;我提出的解决办法行不通。我会继续考虑的!