
deVoid UI Framework 架构设计解析一条铁律如何拯救你混乱的 UI 代码【免费下载链接】uiframeworkThe deVoid UI Framework for Unity项目地址: https://gitcode.com/gh_mirrors/uif/uiframework做 Unity 游戏的人都懂那种痛HUD 挡在弹窗上、弹窗又挡住了主菜单屏幕之间互相持有引用改一个界面要翻半天代码。deVoid UI Framework简称 devUI是一个专为 Unity 设计的 UI 架构与导航框架它用一条铁律和分层结构帮你把混乱的 UI 代码整理得井井有条。本文带你从架构设计视角快速看懂它为什么能让 Unity UI 架构变得简单、清晰、可扩展。一条铁律外部代码永远不许直接碰 UI 内部整个框架的地基只有一句话外部代码永远不能直接访问 UI 的内部实现一切交互都必须通过统一入口。这条铁律的落点就是UIFrame—— 整个框架的中心访问点。所有打开窗口、显示面板、注册屏幕的调用都指向它它再向内部分层转发uiFrame.RegisterScreen(YourScreenId, yourScreenPrefab); uiFrame.OpenWindow(YourWindowId); uiFrame.ShowPanel(YourPanelId);好处立竿见影✅ 业务逻辑与 UI 实现彻底解耦UI 重构不影响玩法代码✅ 想读单例数据、上 MVC 或 MVVM 都行框架不干涉你 UI 内部怎么写✅ 每个 UIFrame 都是自包含结构甚至可以在同场景并存多个 UI分屏玩家专属 UI 就是这么实现的这条铁律的入口类见 UIFrame.cs。四层架构UI Frame → Layer → Screen → WidgetdevUI 的层级结构非常克制一层套一层职责单一层级职责对应源码UI Frame唯一对外入口门面模式UIFrame.csUI Layer管理某一类屏幕注册、显示、隐藏Core/AUILayer.csScreen具体界面Panel 或 WindowCore/AUIScreenController.csWidget屏幕内可复用的自包含小组件MANUAL 说明屏幕如何被注册才能使用这是框架的第二个关键约束任何屏幕必须注册到某个 Layer 后才能被显示。注册时框架会自动把屏幕的 Transform 重新挂载reparent到正确的图层下层级顺序从此不用你操心。注册逻辑见 Core/AUILayer.cs。Panel 和 Window两种屏幕各司其职这是新手最容易困惑的点也是框架最值得学的地方——它把屏幕明确分成两类 Window窗口有历史、有队列一次只能操作一个占满屏幕大部分区域是当前的主交互点内置历史栈Stack和队列Queue打开新窗口自动压栈关闭后回退到上一个标记为Pop-up的窗口会自动置顶并加上暗色背景天然的模态弹窗方案实现见 Window/WindowUILayer.cs其中windowQueue、windowHistory两个数据结构就是导航能力的核心。 Panel面板随手开关的碎片 UIHUD、血条、小地图这类想显示就显示的 UI无历史、无队列可以和多个其他 Panel 同时可见支持按Priority优先级挂到不同 Para-Layer控制谁画在谁前面实现见 Panel/PanelUILayer.cs。 默认渲染顺序PanelLayer → WindowLayer → PriorityPanelLayer → Pop-up 层 → 其他 Panel 层。过渡动画与输入拦截移动端 UI 的救命设计每个屏幕都内置AnimIn/AnimOut两个过渡插槽可挂载任意ATransitionComponent见 ScreenTransitions/ATransitionComponent.cs不挂则直接 SetActive框架也自带简单的淡入淡出实现ScreenTransitions/SimpleFadeTransition.cs。更贴心的是移动端最常见的 bug 是转场动画还没播完用户就点了下一个按钮。WindowUILayer检测到有过渡动画在播时会自动禁用 GraphicRaycaster 拦截一切用户输入动画结束自动恢复。相关逻辑见 Window/WindowUILayer.cs 与 UIFrame.cs。5 分钟上手三步跑通 devUI第 1 步在 Project 面板右键Create → deVoid UI → UIFrame Prefab把 Prefab 拖进场景。第 2 步注册你的屏幕每个屏幕用唯一 ScreenId习惯上直接用 Prefab 名。第 3 步调用OpenWindow/ShowPanel显示屏幕。如果嫌代码注册麻烦用内置的UI Settings一键配置Create → deVoid UI → UI Settings把 UIFrame Prefab 配成 UI Template把所有屏幕拖进注册列表之后一行代码拿到完整初始化的实例自动注册全部搞定uiFrame yourUiSettings.CreateUIInstance();配置类源码UISettings.cs。如何自定义你的屏幕类型安全的 Properties 传参屏幕的数据传递走Properties 负载机制类型安全是框架明确的设计目标继承AWindowControllerTProps或APanelControllerTProps重写OnPropertiesSet()—— 这是填充数据的最佳入口此刻Properties保证可用事件监听统一放在AddListeners()/RemoveListeners()中public class PlayerWindowController : AWindowControllerPlayerWindowProperties { protected override void OnPropertiesSet() { UpdateData(Properties.PlayerData); // 拿到 OpenWindow() 传入的数据 } }两个实战细节值得注意Properties 类必须加[System.Serializable]否则无法在 Prefab 上配置不给屏幕传参时框架会回退到Prefab 上预设的属性值编辑器就能预览默认状态完整的方法生命周期清单WhileHiding、Close()等见手册 MANUAL.md。这套架构解决了什么、又放弃了什么devUI 的取舍非常清醒它不强制MVC、不内置 MVVM、甚至不做手柄导航——框架只锁死统一入口 分层隔离这一件事其余全部放行。这是作者在多款移动端 F2P 游戏里打磨出的最小公约数也解释了为什么它简单到三步上手却撑得住中大项目的复杂度。 延伸阅读项目说明 README.md、官方手册 MANUAL.md总结一条铁律带来的秩序 一切调用走UIFrame入口UI 内部实现对外封闭 Frame / Layer / Screen / Widget 四层结构职责清晰 Window 管历史与队列Panel 管碎片 UIPop-up 天然模态 过渡动画可插拔转场期间自动锁输入 类型安全的 Properties 传参 UI Settings 一键初始化如果你正在被 Unity UI 的层级混乱和屏幕引用纠缠困扰这套架构值得作为你下一个项目的起点。【免费下载链接】uiframeworkThe deVoid UI Framework for Unity项目地址: https://gitcode.com/gh_mirrors/uif/uiframework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考