菜单

GUI 系统

相关源文件

本文档概述了 Godot 的图形用户界面 (GUI) 系统,该系统允许在引擎内创建和管理交互式用户界面。GUI 系统构建在一个分层的控件框架之上,这些控件可以组合起来,为游戏内 UI 和编辑器工具创建复杂的界面。

有关编辑器自身 UI 实现的信息,请参阅 编辑器架构

核心架构

Godot 的 GUI 系统围绕 Control 节点构建,该节点是所有 UI 元素的基础类。该系统遵循分层结构,其中控件可以嵌套在其他控件内,以创建复杂的布局和交互。

控件节点层级

来源

Control 类提供了核心功能,用于

  • 大小和定位
  • 输入处理
  • 焦点管理
  • 主题集成
  • 布局管理

控件可以使用不同的系统进行放置和调整大小

  1. 锚点和边距,用于基于边缘的定位
  2. 尺寸标志,用于基于容器的定位
  3. 布局属性,用于自定义布局

事件处理流程

来源

文本处理组件

GUI 系统包含多个专门用于文本显示和编辑的控件,每个控件都有不同的用途。

文本显示和编辑控件

控制目的主要功能
标签显示单行或多行文本自动换行、截断、文本方向
RichTextLabel显示富文本格式BBCode 标记、内嵌图像、自定义效果
LineEdit单行文本输入选择、撤销/重做、虚拟键盘
TextEdit多行文本编辑语法高亮、撤销/重做、行号
CodeEdit面向代码的文本编辑代码补全、缩进、折叠

来源

TextEdit 架构

TextEdit 类是更复杂的 GUI 组件之一,支持诸如

来源

TextEdit 中的内部文本存储系统使用一种称为 Text 的结构,该结构管理

  • 具有丰富元数据的行数据
  • 具有正确渲染信息的文本段落
  • 双向文本支持
  • 文本测量和布局计算

容器控件

容器是专门的控件,可以自动管理子控件的布局。

Tree 和层级数据

Tree 控件是一个多功能的容器,用于显示带有列的层级数据

来源

Tree 控件是用以下方式构建的:

  • TreeItem 对象,代表单个树节点
  • 基于单元格的数据结构,用于多个列
  • 支持自定义单元格(文本、图标、复选框等)
  • 展开、选择和多选功能

ItemList 用于线性数据

ItemList 控件提供了一个简单的可选项目列表

来源

Godot 的 GUI 系统包含多个用于创建弹出窗口和对话框的组件。

来源

PopupMenu 控件值得特别关注,因为它在 GUI 系统中被广泛用于上下文菜单

来源

编辑器集成

许多 GUI 控件都与编辑器进行了特殊集成,为开发者提供增强的功能

代码编辑

编辑器扩展了 TextEditCodeEdit 控件,增加了额外的功能

来源

主题系统

GUI 组件依赖于主题系统进行一致的视觉样式设置

来源

GUI 控件会缓存主题值以实现高效渲染,并且通常会根据其状态(正常、悬停、按下等)应用不同的样式。

无障碍功能

Godot 的 GUI 系统包含辅助功能,以支持广泛的用户

来源

常用模式和用法

信号和连接

GUI 控件通过信号进行通信,这些信号可以连接到方法

输入处理

控件通过 _gui_input() 方法处理输入

来源

结论

Godot 的 GUI 系统通过模块化的、基于控件的架构,提供了一套全面的工具来构建交互式界面。通过理解不同控件之间的关系以及它们如何处理布局、输入和主题,开发人员可以为他们的游戏和应用程序创建丰富的用户界面。

该系统设计得非常灵活,允许创建简单的界面和复杂的自定义 UI 实现,同时在不同平台上保持一致的行为和外观。