2.8 KiB
2.8 KiB
UI 窗口系统
目的
记录 StrayFog 窗口管理、资源加载、生命周期、UIMono 绑定和虚拟列表的稳定使用规则。
主要路径
| 类型 | 路径 | 说明 |
|---|---|---|
| ESF 源码 | Assets/StrayFog/Editor/CopyToX/CopyToHF/UIWindowMgr/ |
窗口框架真实源码 |
| HF 生成代码 | Assets/Game/GameHFScripte/CopyToHF/UIWindowMgr/ |
CopyToX 结果,禁止手改 |
| 业务窗口 | Assets/Game/GameHFScripte/GameFunction/UIWindows/ |
窗口与子组件业务逻辑 |
| Mono 组件 | Assets/Game/GameMono/Scripts/UIMono/ |
SFUI/UIMono 和列表包装 |
| UI 资源 | Assets/Game/GameHFResource/<语言>/UIWindows/ |
Prefab 与窗口资源 |
打开流程
HFFunCatalogue.UIManager.OpenWindow<T>()
-> HFUIWindowMgr 创建窗口任务
-> 读取 HFAssetBundlePath / HFUIWindowLayer
-> 复用缓存或创建窗口逻辑
-> LoadInMemory 加载 Prefab
-> BindGameObject / OnAttachWindow
-> OnRunAwake(实例首次绑定)
-> OnOpen(每次打开)
关闭窗口会执行 OnClose、隐藏实例并放入窗口缓存。需要释放窗口与资源时使用 UI 管理器公开卸载入口,不直接 Destroy 窗口 Prefab 或绕过管理器修改父节点和 siblingIndex。
生命周期
| 生命周期 | 用途 |
|---|---|
OnRunAwake |
查找控件、绑定按钮、配置并初始化虚拟列表,只执行一次 |
OnOpen |
注册本次打开所需事件、刷新数据与显示状态 |
OnClose |
移除事件、停止计时器和清理本次打开状态 |
异步加载、动画和下载的成功、失败、取消路径都必须结束窗口任务,不能让窗口永久停在加载中。
使用规则
- 窗口继承
AbsHFUIWindow,配置HFAssetBundlePath和HFUIWindowLayer。 - 打开和关闭统一通过
HFFunCatalogue.UIManager。 OnOpen与OnClose中的事件注册和释放保持对称。- 引用绑定优先使用项目 UIMono/SFUI 流程,不堆叠
transform.Find。 - 单列虚拟列表使用 LoopListView2 包装接口,多列布局使用 LoopGridView 包装接口。
- 模板节点在 Prefab 中保持禁用,由虚拟列表创建实例。
- UI 修改必须验证脚本、Prefab 层级、RectTransform、组件状态和运行时效果。
子文档
文档关联
| 文档 | 关联原因 |
|---|---|
| 模块索引 | 模块入口和状态 |
| 资源管理 | UI Prefab 加载与卸载 |
| 事件系统 | 窗口事件生命周期 |
| 架构说明 | ESF/HF 源码边界 |
| 开发规则 | UI 与 Prefab 通用约束 |