Files
2026-07-10 17:50:20 +08:00

2.8 KiB
Raw Permalink Blame History

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,配置 HFAssetBundlePathHFUIWindowLayer
  • 打开和关闭统一通过 HFFunCatalogue.UIManager
  • OnOpenOnClose 中的事件注册和释放保持对称。
  • 引用绑定优先使用项目 UIMono/SFUI 流程,不堆叠 transform.Find
  • 单列虚拟列表使用 LoopListView2 包装接口,多列布局使用 LoopGridView 包装接口。
  • 模板节点在 Prefab 中保持禁用,由虚拟列表创建实例。
  • UI 修改必须验证脚本、Prefab 层级、RectTransform、组件状态和运行时效果。

子文档

文档关联

文档 关联原因
模块索引 模块入口和状态
资源管理 UI Prefab 加载与卸载
事件系统 窗口事件生命周期
架构说明 ESF/HF 源码边界
开发规则 UI 与 Prefab 通用约束