Skip to content

UIModule 界面系统

UIModule 管理窗口资源、创建队列、分组排序、焦点、动画和销毁。窗口逻辑继承 UIWindowBase,业务通常只调用 Show、Hide、Destroy,不直接实例化 UI Prefab。

子功能

快速使用

显示、隐藏和销毁窗口:

csharp
UtilFunc.ShowUI<UIShopWindow>(shopId, () =>
{
    // Create、Init、Show 操作均已执行。
});

UtilFunc.HideUI<UIShopWindow>(() =>
{
    // Hide 操作已执行。
});

bool exists = UtilFunc.HasUI<UIShopWindow>();
UtilFunc.DestroyUI<UIShopWindow>();

也可以直接使用 Module:

csharp
UIModule ui = UIModule.Get();
if (ui == null)
    return;

ui.PreLoad<UIShopWindow>();
ui.Show<UIShopWindow>(shopId);
ui.Hide<UIShopWindow>();
ui.Destroy<UIShopWindow>();

ShowHide 会进入 UI 操作队列。完成回调表示相应队列操作已执行,不表示动画以同步方式阻塞到结束;动画由管线逐帧推进。

设计思路

UIModule 把“资源尚未完成”和“窗口生命周期操作”统一进可合并的请求队列,使连续 Show/Hide/Destroy 不会对同一 Prefab 产生竞态。窗口一旦 Init,资源句柄所有权交给 UIWindowBase;Init 前取消则仍由队列释放,所有权边界明确。

分组栈负责层级与焦点,窗口类只表达自己的业务生命周期。Widget 和循环视图继续拆分窗口内部表现,避免所有代码堆进 Module 或窗口主类。

注意事项

  • Prefab、Binding 和 Logic 必须对应同一个窗口类型与命名;绑定节点改名或移动后必须重新生成 Binding。
  • BindEvent 不自动退订,生命周期不配对会留下已销毁窗口回调。
  • BindAsset 的资源由窗口统一释放,不要重复释放底层句柄。
  • RestoreLinked 不清屏;严格顺序恢复前应预加载窗口。
  • hideOnDestroy 当前只是序列化预留项;需要销毁窗口时显式调用 Destroy / DestroyUI
  • 外部 UICameraBridge 必须唯一,并在 UIModule 初始化前生效。
  • Scene 内窗口被场景销毁时应依赖 UIWindowSceneBridge 通知框架,不要绕过 UIModule 手工销毁普通窗口。
  • 本地化 uGUI Text 应使用 LocalizedTextUIFontBinding,Prefab 不保存项目字体直接引用。
  • UI 生成与绑定命名规则详见编辑器工具中的 UI Generator 页面。

SuperCore 使用 MIT License 开源