更新日期:2022/11/4
更新日期:2024/11/4
开发平台:Unity 2021
编程平台:Visual Studio 2022
一、问题描述
在 Unity 开发多 Canvas 组合的框架下容易遭遇 Canvas 下 UI 点击事件无法触发的问题。对UI框架造成一定程度的影响。考量到影响程度。记录此问题的解决方案。
备注:修改 UGUI 显示优先级需要 Canvas 组件覆写渲染层级。存在些开发情况下,忽略 GraphicRaycast 组件对交互功能的影响。进而发生误判在 Event System 、层级覆盖上等问题。
二、检查思路
2.1 确认 UGUI EventSystem 是否存在且正常运行
默认创建 UGUI Canvas 时,会增加管理 UGUI 的 Event System 组件。在 Unity 2020 版本以上的 New Input System 会要求使用在 InputSyetemUIInputModule.cs
组件上的修复与应用按钮。
2.2 确认 交互UI对象 在层级上无其他UI可覆盖
在 Unity 中,层级显示关系的分两种情况处理。
该情况,应注意使用中层级下者是否有
gameObject.SetActive(true)
/gameObject.acticeslef = true
的状态。
- 情景01:存在后层级中 gameObject 为
true
,对象挂载如UnityEngine.UI.Image
这类继承Graphics
的组件。该部分组件使用 Alpha = 0 的预设配置。- 情景02:自身或父层级使用
UnityEngine.UI.CavnasGroup
/GraphicsRaycast
这类组件,其内设定的 Ignore\Block 等属性阻碍原目标 UI 对象的判断。
三、解决方案:补充 Graphic Raycaster 组件
不触发 UI点击事件 的核心原因是缺少检测UI图形的组件 —— Graphic Raycaster。该组件服务于 Canvas画布组件。检测其下的所有 UGUI图像与响应事件。
特殊情况:在预制体下,确认 Canvas 均装有 Graphic Raycaster 组件。但仍然未触发 UGUI事件。
解决方式:
- 取消关联 Prefab 根对象。重新制作新的预制体即可
- 或检查预设与实际冲突存在的组件,因为笔者在预制体(根)中添加 Graphic Raycaster 组件后,与原场景在用对象冲突,出现多批的两个同组件被装载的问题。重还原至根预设信息,并更新组件即可。