Reference

UI Click Binding Field Guide

当前 HappyMahjong 新功能不按 NGUI 开发。看到 UIEventListener 不代表这是 NGUI;它主要作为兼容且方便的点击事件绑定工具保留。

先记住这条

项目事实: 当前项目里已经没有需要按 NGUI 范式开发的新 UI。NGUI 相关目录 / 类主要是历史兼容残留。新需求应优先沿用当前模块的 UGUI / 项目 UI 系统、UIUtil、PopUpManager、UIEventListener 和 Empty Click 约定。

判断表

看到什么真实含义应该怎么做不要怎么做
Canvas, Image, Button, Text, RectTransformUGUI / Unity UI 对象沿用当前模块的 UGUI 结构和绑定方式。不要新造一套孤立 Canvas 或绕过项目弹窗系统。
UIEventListener.Get(go).onClick项目保留的点击绑定工具,不等于 NGUI 新开发可按相似代码绑定点击,注意解绑、重复绑定和点击音效参数。不要因为路径含 NGUI 就判断需求要按 NGUI 范式重写。
EmptyClick, emptyClick, CloseEmptyClick, Empty Click专门接收点击的空对象 / 遮罩对象用来承接空白区域点击、关闭弹窗、阻断穿透、背景点击等。不要删除;不要把业务内容挂到 Empty Click 上。
UIUtil.LoadPrefabCallBack, UIUtil.Instantiate项目资源 / UI 加载入口沿用它加载和实例化 UI。不要新写 Resources.Load 或裸 Object.Instantiate
PopUpManager项目弹窗管理系统通过它弹窗、关窗、处理层级。不要直接 SetActive(true) 当弹窗系统。
UILabel, UISprite, UIPanel历史兼容 / 遗留符号如果现有模块仍出现,先问 owner 或沿用局部相似写法。不要为新功能主动引入 NGUI 组件。

Empty Click 是什么

弹窗点击区域示意

弹窗内容
按钮、文案、道具、输入框
外层
Empty Click
透明/空对象,接收背景点击或阻断穿透

Empty Click 常用于“点空白关闭”“点遮罩不穿透”“背景点击触发关闭”等场景。它是交互接收层,不是业务内容层。

常见绑定形态

// 普通点击绑定:沿用项目相似代码
UIEventListener.Get(closeBtn.gameObject, ClickableTypeDef.CloseSoundType).onClick = OnClickClose;

// Empty Click:接收空白区域 / 遮罩点击
var emptyClick = transform.Find("EmptyClick");
if (emptyClick != null)
{
    UIEventListener.Get(emptyClick.gameObject).onClick = OnClickClose;
}

给 agent 的判断 prompt

先不要修改代码。请分析这个 UI 的点击绑定方式。
请输出:
1. 点击对象路径,例如 Btn_Close / EmptyClick / CloseEmptyClick。
2. 使用的是 Button.onClick、UIEventListener.Get(...).onClick,还是其他方式。
3. Empty Click 是否用于背景点击、关闭弹窗或阻断点击穿透。
4. UI 是否通过 UIUtil 加载,弹窗是否通过 PopUpManager 管理。
5. 如果要修改点击逻辑,最小修改文件是什么。
6. 是否存在重复绑定、未解绑、页面销毁后回调风险。

所有结论附文件路径。不确定处标注“推测”。
课堂口令: UIEventListener 是点击绑定工具,不是 NGUI 技术栈判断依据。Empty Click 是接点击的空对象,不要误删,也不要塞业务内容。