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

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

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

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

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

参考链接:

相关推荐
枫景Maple9 小时前
Shader开发(六)什么是着色器
游戏引擎·着色器
向宇it12 小时前
【unity小技巧】封装unity适合2D3D进行鼠标射线检测,获取鼠标位置信息检测工具类
游戏·3d·unity·游戏引擎
年少无知且疯狂17 小时前
【Unity】实现小地图
unity·游戏引擎
AA陈超17 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 #06-11:游戏后效果执行
c++·游戏·ue5·游戏引擎·虚幻
徐子竣1 天前
[学习记录]Unity-Shader-常量缓冲区(CBUFFER)
学习·unity·游戏引擎
大飞pkz1 天前
【Unity】Application类常见路径
unity·游戏引擎·游戏开发·application常用路径·数据路径·数据存储位置
向宇it1 天前
【unity小技巧】封装一套 Unity 的植物生长系统
游戏·unity·c#·游戏引擎
星星火柴9361 天前
AscendantPath | 实现视觉小说的人物对话系统(二)
游戏·unity·游戏程序·版本为2022.3.57·配合github下载地址使用
死也不注释1 天前
【在Unity游戏开发中Dictionary、List介绍】
数据结构·游戏·unity·游戏引擎·list·游戏程序
沧海归城2 天前
Unity_XR控制手部动画
unity·游戏引擎·xr