[unity 点击事件] 区域响应点击事件,排除子节点区域,Raycast Target 应用

当我打开一个二级弹窗后,希望可以通过点击弹窗以外的区域来关闭该弹窗。一开始我是在弹窗主节点上挂载了一个 button 组件,该 button 注册的点击事件中关闭该弹窗。在子节点(一个背景图)的image组件上启用 Raycast Target 选项,希望拦截点击事件,使得该背景图区域不会触发关闭按钮的事件。但是实际表现上,在该区域仍然可以触发主节点上的 button 点击事件。

查了各种资料,加上各种尝试,发现了两种解决办法。

第一种方案,是主节点不用 button 来响应关闭事件,而是继承 IPointerClickHandler,重写 OnPointerClick 方法来响应点击事件,在响应函数中检查点击区域是否在子节点区域外,在区域外才执行关闭逻辑。这种方法可行,但是不优雅。

第二种方案,是将 button 挂载到子节点同层级的 object 上,而不是直接放在主节点上。通过尝试,发现取消 Raycast Target 选项时,点击 imgBg 时会穿透使得 bgMask 上的 button 响应。勾上 Raycast Target 选项后,不再穿透。从这里可以看出,Raycast Target 选项对于同级对象,只有最上层对象会响应点击,但是为了让点击事件能传递下去,该选项不会阻止下层节点的响应。

参考链接:

相关推荐
张老师带你学6 小时前
unity TerrainSampleAssets
科技·游戏·unity·游戏引擎·模型
亿元程序员6 小时前
亿元Cocos小游戏实战合集2.0
游戏·游戏引擎
RReality9 小时前
【Unity Shader URP】色带渐变着色(Ramp Shading)实战教程
ui·unity·游戏引擎·图形渲染
mxwin17 小时前
Unity URP 体积光与雾效 基于深度重建世界空间位置,实现体积雾与体积光
unity·游戏引擎
张老师带你学18 小时前
unity 树资源 有樱花树 buildin
科技·游戏·unity·游戏引擎·模型
魔士于安18 小时前
unity 植物 不常见 花 触手植物
游戏·unity·游戏引擎·贴图·模型
魔士于安19 小时前
unity=>传送门特效 带自由视角旋转放大 鼠标操作
前端·游戏·unity·游戏引擎·贴图·模型
南無忘码至尊20 小时前
Unity学习90天 - 第4天 - 认识物理系统基础并实现物体碰撞反弹
学习·unity·游戏引擎
南無忘码至尊20 小时前
Unity学习90天 - 第4天 - 学习预制体 Prefab + 实例化并实现按鼠标生成子弹
学习·unity·游戏引擎
魔士于安1 天前
Unity资源Toon City Pack 发电厂 工地 公园 地铁站口 银行 车 直升飞机 可动 URP
游戏·unity·游戏引擎·贴图·模型