14 个重大版本发布
0.15.0 | 2022 年 1 月 7 日 |
---|---|
0.14.0 | 2021 年 9 月 13 日 |
0.13.1 | 2021 年 8 月 12 日 |
0.12.0 | 2021 年 7 月 12 日 |
0.2.0 | 2020 年 3 月 5 日 |
#1570 在 游戏开发
每月 85 次下载
在 2 个游戏包中使用(通过 rg3d)
1MB
26K SLoC
rg3d-ui
保持模式,通用目的,与图形 API 无关的用户界面库。受 WPF 启发。
注意: 尽管这个游戏包的名称中带有 rg3d
前缀,但它可以单独使用而不会出现任何问题。
特性
- 超过 28 个小部件
- 全 TTF/OTF 字体支持
- 强大的布局系统
- 完全可定制 - 您可以构建任何复杂性的视觉树:例如,树视图项可以具有任何子小部件作为内容。
- 与 GAPI 无关 - 这个游戏包不知道任何关于渲染后端的信息:它可以用于 OpenGL、DirectX、Vulkan、Metal,甚至内置的操作系统绘图 API。
- 与 OS 无关 - 所有操作系统和窗口管理器中所有小部件的外观相似。
- 可扩展 - 完全支持用户定义的小部件。
小部件
- 按钮
- 边框
- 画布
- 颜色选择器
- 颜色字段
- 复选框
- 装饰器
- 下拉列表
- 网格
- 图像
- 列表视图
- 弹出窗口
- 进度条
- 滚动条
- 滚动面板
- 滚动查看器
- 堆叠面板
- 标签控件
- 文本
- 文本框
- 树
- 窗口
- 文件浏览器
- 文件选择器
- 停靠管理器
- 数值增量器
- Vector3 编辑器
- 菜单
- 菜单项
- 消息框
- 包裹面板
- 曲线编辑器
- 用户定义的小部件
局限性
- 由于这个库是 OS-、GAPI-无关的,它不能创建原生操作系统窗口,也不能在屏幕上渲染任何内容。相反,它使用一个内部绘图缓冲区,该缓冲区包含一个命令列表,该列表必须在您的游戏/应用程序中解释。这是一种非常灵活的方式,但也有一些限制:多窗口(原生)配置难以实现,您必须实现自己的 UI 渲染器,这可能非常困难,如果您不熟悉此类内容。
- 仍然没有键盘导航,计划中但优先级不高。
- 不支持从右到左的文字(阿拉伯语、希伯来语等)
性能
- 总的来说,rg3d-ui 运行得很快,但如果使用不当,它可能会很慢。由于这个库使用一个非常复杂的布局系统,如果有很多 ui 元素被移动(例如,在滚动时),它可能会运行得很慢。希望它内置了布局缓存系统,并且它依赖于布局无效化,因此它不会在每一帧都进行布局计算 - 只有在发生重大变化时(位置、大小等)。
- 渲染命令批处理可能比较困难,因为这个库广泛使用了裁剪,每个裁剪几何形状都必须作为一个单独的绘制调用绘制到模板缓冲区。渲染仍然需要优化,目前效率不高。
样式
rg3d-ui 使用一种不太常见的样式方式 - 您需要替换小部件视觉树中的整个子图。这是什么意思?rg3d-ui 使用图来构建任何复杂度的视觉树,每个小部件都是图中的节点集合。例如,按钮是一组背景和前景小部件,背景小部件通常定义外观,前景显示内容。按钮的内容可以是任何小部件,在大多数情况下,它是一个文本或图像。因此,要改变按钮的外观,您必须在构建阶段定义自己的背景小部件,默认情况下,rg3d-ui 使用 Decorator 小部件,该小部件在接收到 MouseEnter、MouseLeave 等消息时仅更改其前景画笔。这一事实显著增加了 次要 样式的复杂性(如更改颜色),但它是一种非常灵活的方法,允许构建自己的独特样式。大多数小部件构建器都提供了更改其部分的方法,其中一些可能仍然缺少这种功能,但最终应该会修复。
截图
贡献
- 为一个人编写用户界面库是非常具有挑战性的,所以任何帮助都受到欢迎。
文档
待办事项。
示例
待办事项。
有两个项目使用了这个 UI 库
然而,从这些项目中了解如何使用库可能过于困难,因此应该添加独立的示例。这仍然是一个待办事项。
依赖项
~9–19MB
~272K SLoC