JSON UI¶
JSON UI是Minecraft基岩版中用于定义游戏用户界面的系统。该系统使用JSON格式的数据文件来声明界面的布局、控件和交互逻辑,允许通过资源包对游戏界面进行修改和扩展。
概述¶
基岩版的几乎所有游戏界面——包括主菜单、背包界面、合成界面、设置界面、聊天框、暂停菜单等——都通过JSON UI系统定义。JSON UI文件存放在资源包的ui/目录中,每个文件定义一个或多个界面的布局和行为。
JSON UI系统使用声明式的方式描述界面:开发者通过JSON定义控件的类型、位置、大小、绑定数据和交互行为,游戏引擎在运行时根据这些定义渲染界面。
控件¶
控件(Control)是JSON UI中的基本元素,每个控件代表界面上的一个可视化或逻辑组件。控件以JSON对象的形式声明,通过type字段指定类型。常见的控件类型包括:
| 类型 | 描述 |
|---|---|
panel | 面板,用于组织和容纳子控件 |
label | 文本标签 |
image | 图片 |
button | 按钮 |
toggle | 开关 |
slider | 滑块 |
edit_box | 文本输入框 |
grid | 网格布局 |
stack_panel | 栈面板,沿一个方向依次排列子控件 |
scroll_view | 滚动视图 |
input_panel | 输入面板,用于处理输入事件 |
screen | 屏幕,界面的顶层容器 |
布局系统¶
JSON UI的布局系统基于锚点(Anchor)和偏移(Offset)来定位控件。每个控件可以指定其在父控件中的锚点位置(如左上、居中、右下等),并通过偏移量进行微调。
控件的大小可以通过固定像素值、百分比或自适应内容等方式指定。九切片(NineSlice)技术被广泛用于按钮和面板等控件的背景纹理,使纹理在拉伸时保持边角的正确比例。
绑定¶
绑定(Binding)是JSON UI中将界面控件与游戏数据连接的机制。通过绑定,控件可以动态显示游戏运行时的数据(如玩家名称、生命值、物品数量等),也可以将用户的输入操作传递给游戏逻辑。
绑定通过bindings数组声明,每个绑定指定一个数据源名称和目标属性。游戏引擎在每帧更新时自动同步绑定的数据。
屏幕¶
屏幕(Screen)是JSON UI中的顶层界面容器。游戏中的每个界面对应一个屏幕定义,屏幕内包含了该界面的全部控件层次结构。屏幕通过screen类型的控件定义,并由游戏引擎根据游戏状态自动显示和隐藏。
修改与限制¶
通过资源包可以覆盖原版的JSON UI文件来修改游戏界面。但JSON UI系统存在以下限制:
- 不支持创建全新的独立界面类型,只能修改或扩展已有界面。
- 部分控件类型和绑定数据源是硬编码的,不可自定义。
- 修改JSON UI需要对原版UI文件的结构有充分的了解,因为控件之间存在大量的引用关系。
脚本API与JSON UI¶
在国际版中,脚本API提供了有限的界面交互能力,例如通过@minecraft/server-ui模块显示表单对话框。但这些功能与JSON UI系统相互独立,脚本API目前无法直接操控JSON UI控件。
中国版增强¶
中国版的JSON UI在国际版基础上进行了扩展,提供了更多的控件类型和绑定接口,以支持中国版独有的界面功能。