跳转至

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文件的结构有充分的了解,因为控件之间存在大量的引用关系。

脚本APIJSON UI

在国际版中,脚本API提供了有限的界面交互能力,例如通过@minecraft/server-ui模块显示表单对话框。但这些功能与JSON UI系统相互独立,脚本API目前无法直接操控JSON UI控件。

中国版增强

中国版的JSON UI在国际版基础上进行了扩展,提供了更多的控件类型和绑定接口,以支持中国版独有的界面功能。