Daikon Forge GUI 事件编程
第一节 Daikon Forge 介绍
Daikon Forge(DF GUI ™)是 Unity3D 的一个用户界面库,它为创建游戏的用户界面提供了一种非常灵活和强大的方法。该库包含一系列对大多数用户界面需求有用的核心控件,其强大的组成和继承功能还提供了方便的可扩展性,以满足特定需求。
在本教程中,我们将介绍如何使用 UI Wizard 在场景中创建一个新的 GUI。以下步骤假设你从一个新的空场景开始。
准备工作
- 创建一个空项目,导入 Daikon Forge 的包,并了解一些示例。
- 保存一个场景,命名为
baseControlse。 - 设置用户界面所在的层:打开 TagManager 面板(路径为 Edit → Project Settings → Tags),添加一个新的“GUI”图层。所有的 UI 元素将位于此图层上。
使用 UI Wizard 创建 GUI
来到 Assets → DaikonForge → UI Wizard,这将弹出向导界面。下面我们来了解一下每个选项:
- UI Layer:指定 UI 元素所在的图层,选择刚刚创建的“GUI”图层。
- Orthographic:若选中此选项,意味着用户界面将以 2D 形式显示;若需要 UI 在 3D 中显示,则取消此选项。
- Pixel Perfect:选中该选项时,UI 将完全映射到屏幕像素。例如,文本通常需要像素完美呈现,否则会出现模糊现象。一个 100 像素宽的精灵在任何屏幕上都会显示为 100 像素宽(在高分辨率屏幕上会显示得较小)。
- 输入选项:
- Use Joystick:确定 UI 是否处理游戏杆或手柄输入。
- Joystick Click Button:用于生成 click 事件。当一个 GUI 元素获得焦点时,按下此按钮的效果与使用鼠标左键相同。
- Horizontal Axis and Vertical Axis:用于生成箭头键事件。通过这种方式,UI 控件可以监听箭头键事件来导航当前所选内容,并且操纵杆输入也能自动工作。如果指定自定义轴,其名称必须与 Edit -> Project Settings -> Input 中的设置匹配。
配置完这些选项后,点击“创建”按钮,即可创建并启动用户界面的层级结构。此时,场景中会出现一个新的 UI Root 游戏对象,以及一个 UI Camera 子对象。
查看 UI Root 对象的组件
UI Root 对象被分配了两个自定义组件:Input Manager 和 GUI Manager。下面分别介绍这两个组件:
Input Manager
Input Manager 指定了 DF GUI 处理用户输入的方式。这里有一些在 GUI Wizard 中设置过的熟悉选项,如 Joystick、Joystick Click Button、Horizontal Axis 和 Vertical Axis。此外,还有以下设置:
- Use Touch:启用此选项可支持移动设备上的触摸操作,包括多点触摸。
- Axis Polling Interval:控制轮询水平和垂直轴以生成箭头键事件的时间间隔。
- Retain Focus:决定当没有点击操作时的焦点情况。若启用此选项,最后被单击获得焦点的控件将继续保留焦点;否则,该控件将会失去焦点。
GUI Manager
GUI Manager 负责呈现用户界面,它包含确定控件呈现方式、默认选项和设计时间选项的设置。下面详细介绍这些设置:
- Render Mode:指定 UI 以 Orthographic 还是 Perspective 模式呈现,与 UI Wizard 中的 Orthographic 复选框功能相同。
- Pixel Perfect:确定控件是否完全映射到屏幕像素,与 UI Wizard 中的 Pixel Perfect 复选框功能相同。
- Default Atlas:纹理地图集,默认分配给新的控件。纹理地图集用于减少绘制调用次数,具体内容将在另一个教程中介绍。
- Default Font:默认分配给新标签的字体。字体包含呈现文本所需的数据,具体内容将在另一个教程中介绍。
- Merge Materials:使 GUI Manager 尝试按材质对控件进行排序,以减少绘制调用次数。例如,若有来自图集 A 的精灵作为背景、来自图集 B 的精灵作为中间内容,以及图集 A 中的其他精灵作为前景,DFGUI 通常会生成三个绘制调用(背景、中间、前景)以确保正确的呈现顺序。但可以强制 DFGUI 将前景和背景合并为一个绘制调用,不过这可能会导致渲染顺序问题。
- Generate Normals:使 GUI Manager 为每个顶点生成法线,这是使用需要法线的着色器(如照明着色器)所必需的。
- Screen Width and Screen Height:控制设计画布的大小。例如,若想在 640 × 480 大小的画布上设计 UI,可以在此输入相应数值并点击“Apply”。UI 仍能在所有屏幕分辨率下正常显示,也可以点击“Use Build Settings”,从 Build Settings 复制默认的显示分辨率。
- Show Wireframe:在 UI 中显示线框网格。
- Show Rulers:在 UI 画布边缘显示标尺标记,用于辅助用户进行 UI 设计。
- Snap To Grid:将 UI 控件对齐到网格上,辅助用户进行 UI 设计。
- Show Grid:显示网格,用于网格对齐。
- Grid Size:控制网格单元的大小,用于网格对齐。
- Show Safe Area:在 UI 边缘周围显示矩形,用于显示在 TVs 等设备上可能出现一定百分比图像边框时的用户界面设计。
- Safe %:用于设置安全区域的百分比,通常 5% - 10% 足以满足大多数情况。
- Force Refresh:立即重绘整个 UI。若在更新时某些内容未正确显示,可以选择强制刷新。
在接下来的教程中,我们将介绍一些基本的控件,如精灵、标签和按钮(sprites, labels, and buttons)。
DF - GUI 特点
1. 深度编辑器集成
DF - GUI 与 Unity3D 编辑环境实现了广泛的整合。它提供自定义检查器,针对每个组件向导简化复杂的多步任务;具备提高生产力的上下文菜单;支持以所见即所得的方式使用编辑控件创建复杂布局,还有多个精心设计的工作流程增强功能。这种无缝集成让开发者能够更专注于 UI 本身,无需担心 DF - GUI 的使用问题。
2. 全所见即所得的体验
DF - GUI 控件在 Unity 编辑器中是“实时”的,对控件属性所做的任何更改都会立即反映在编辑界面中,无需点击“播放”按钮。
3. 支持免费版和专业版
DF - GUI 专门设计为可在 Unity 免费版中工作。由于它通过创建和渲染标准的 Unity 网格对象来实现功能,因此可在独立平台、网络平台以及 Android 等移动平台上使用。
4. 强大的事件系统
所有的 DF - GUI 控件都能在多种情况下直接引发事件,并且具备灵活的基于反射的信号传导机制。
5. 事件绑定
除了库核心的内建事件系统,DF - GUI 还提供事件绑定组件,将简单灵活的设计时体验与绑定到任何其他组件的事件处理程序的能力相结合。
6. 数据绑定
DF - GUI 提供强大的数据绑定系统,可将任何组件的属性绑定到其他组件的特性上,实现代码和 UI 呈现的分离,无需编写特定的“胶水代码”,就能将 MVVM 样式的属性暴露到用户界面。
7. 统一输入
DF - GUI 能够轻松支持使用键盘、操纵杆或鼠标操作同一用户界面。与一些竞争对手不同,DF - GUI 拥有统一的输入焦点和事件系统,确保不同的输入法能够无缝协同工作。
8. 高性能
DF - GUI 在设计和优化上,能够以最少的绘制调用创建和渲染高度复杂的用户界面。在大多数情况下,即使是具有多个剪辑区的复杂且高度嵌套的 UI,也可以通过单一绘图调用进行渲染。同时,其内存使用率经过高度优化,即使是高度动态的用户界面也不会过度消耗内存,避免频繁的垃圾回收。
9. 强大的布局功能
每个控件都支持使用“锚点”,控件的每条边(或任意组合的边缘)都可以“挂靠”到其父容器的对应边(父容器可以是另一个控件,甚至是屏幕本身)。这样,无论用户交互、代码操作还是屏幕分辨率变化导致控件调整,即使是非常复杂的嵌套布局也能自动调整,而不会影响用户界面的可用性,无需编写自定义调整逻辑。
10. 动态效果
DF - GUI 包含一个基本但强大且易于使用的补间系统,可对场景中任何组件的属性进行动画处理。补间组件可以与事件绑定组件结合使用,以最少的自定义代码设计出响应式的用户界面。
11. 积极开发
DF - GUI 正在积极开发中,随时都有新功能在开发。用户可享受免费更新,无需额外付费即可始终获得最新的功能和 bug 修复。