# TinyWnd **Repository Path**: ylme/tinywnd ## Basic Information - **Project Name**: TinyWnd - **Description**: 用于 Unity 的小巧灵活的基于 NGUI 窗口管理器 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2017-05-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #TinyWnd 一个小巧灵活的 UI 框架。 ## 运行截图 运行截图如下。界面分为主菜单,工具栏。 * 工具栏有三个按钮,Return 用于关闭窗口。Shop 和 Message 用于打开弹出窗口。 * 主菜单包含四个按钮。最右边的按钮就切换显示。Rank 用于打开排行榜窗口。Level 用于打开关卡窗口。 Skill 用于打开技能窗口。 * Rank 、Level 、Skill 就是模拟日常开发中的功能窗口。Level 打开关卡窗口,选择具体的关卡,然后进入战斗,再结束战斗回到进入战斗前的界面。 * 此外图示中也可以看出窗口之间的跳转。 ![Run](Run/Run.gif) ## 运行环境 Unity 5.5 + NGUI 3.11.2 我是在 Unity 5.5 中开发的,使用的 NGUI 版本是 3.11.2 。 打开 Main.unity 然后运行游戏即可。 ## 基本功能 UI 框架首先要明确的就是窗口类型。哪些窗口是用于日常开发,用来展示游戏玩法,哪些窗口起到导航作用,哪些窗口起到提示作用。规划的窗口类型以及日常开发窗口,就可以进行需求分析了。具体如下。 ### 窗口类型 `WndType` 表示窗口类型。一共三种,normal 是用于日常功能开发的窗口,优先级最低。toolbar 是工具栏,例如运行截图最上层一栏。popup 优先级最高,用于弹出消息框,例如点击工具栏上的 Message 按钮打开的消息框。 ### 窗口渲染 * 对于摄像机。专门有一个摄像机用于渲染 `Layer` 是 `UI` 的 `GameObject` 。相同类型的 UI 窗口在同一时间互斥渲染,也就是最多只显示三个 UI 窗口。这里是可以拓展的,只是这里采用了最简单的方法。 * 对于分辨率。窗口理想的运行分辨率是 1280 x 720 。屏幕适配策略是显示窗口全部内容,参考 `UIRoot` 设置。 * 对于 `UIPanel` 的 `depth` 管理。每个打开的窗口都会设置为对应窗口类型的深度值。 ### 窗口跳转 * 窗口跳转是游戏中常见的操作,normal 是日常开发窗口,窗口的跳转都是在 normal 类型窗口间进行的。 * 窗口跳转还包括进入战场和退出战场。 ### 窗口资源 窗口资源以 prefab 形式存放,并且每个 prefab 至少包含一个 `UIPanel` 负责管理此窗口的渲染。资源没有用 AssetBundle 打包,而是 `Resources.Load` 加载。当然这里是可以拓展的。 ### 窗口内存 由于定位是一个小巧的框架,内存管理就很简单,加载到内存就一直存放在内存中了。 ### 窗口拆分 实际项目中有些窗口内容会比较多,因此会考虑窗口拆分,确保窗口的打开效率。很遗憾 UI 框架并未支持此功能,需要你手动管理。参考 `RankWnd` 和 `LevelWnd` 。 ### 三个文件 * WndDef.cs 用于定义一些共用类型和函数。 * Wnd.cs 是窗口基类,开发的新的窗口需要继承 `Wnd` 。 * WndMgr.cs 是窗口管理类。负责管理窗口显示、隐藏等逻辑。