Bedrock Wiki
  • QQ
  • 原站
新手入门指南
  • Guide
    • 1. 简介
      指南
    • 2. 附加组件详解
    • 3. 软件与准备工作
    • 4. 项目设置
    • 5. 创建自定义物品
    • 6. 创建自定义实体
    • 7. Blockbench:建模、贴图与动画制作
    • 8. 添加战利品表、生成规则与合成配方
  • Extra
    • a. 理解JSON
    • b. 下载示例包
    • c. 故障排除
      帮助
    • d. 高级清单文件指南
    • e. 格式版本
    • f. Android 项目设置
JSON UI
  • General
    • JSON UI 入门指南
      指南
    • 最佳实践
      指南
  • Tutorials
    • Aseprite 动画
    • 保留标题文本
      中级
    • 修改服务器表单
      中级
    • 字符串与数字转换
      中级
    • 按钮与开关
      新手
    • 添加HUD界面元素
      新手
  • Documentation
    • JSON UI 文档
Meta
  • Style Guide
  • 使用JSON模式(Schemas)
  • 实用链接
  • 版本控制
  • 附加包性能优化
  • Q&A
    • GameTest 问答集 2021/08/06
    • 世界生成问答 2024/11/15
    • 延迟渲染技术预览问答 2024/02/23
    • 方块与物品问答 2024/08/30
    • 脚本与编辑器问答 2023/09/22
NBT
  • General
    • .mcstructure
  • Tutorials
    • 扩展结构限制
      简单
    • 教育版中的实验功能
      简单
  • NBT in Depth
    • NBT 库列表
      专家
    • NBT读取示例
      专家
    • 关于NBT(命名二进制标签)
      专家
世界生成
  • General
    • 世界生成入门
      指南
      实验性
    • 特性类型
      实验性
    • 生物群系
      指南
      实验性
  • Tutorials
    • 特征(Feature)的方块条件
      实验性
    • 生成地表区块
      实验性
    • 生成自定义矿石
      实验性
    • 生成自定义结构
      实验性
    • 高度图噪声地形
      实验性
  • Documentation
    • 生物群系标签
动画控制器
  • 动画控制器入门指南
    指南
  • 实体命令
    中级
  • AFK检测器
  • 将Molang变量转换为计分板数值
  • 死亡指令
  • 重生指令
命令
  • General
    • 命令方块入门指南
    • 函数
    • NBT 命令
    • 坐标系
    • 方块状态
    • 理解目标选择器
    • 记分板操作
  • Commands
    • Execute
      简单
    • Playanimation
    • 伤害
    • 播放音效
  • On Event Systems
    • 玩家首次加入时
    • On Player Join
    • 玩家离开时触发
    • 玩家死亡事件
    • 玩家重生事件系统
    • 首次加载世界时
  • Scoreboard Systems
    • 实体计数器
    • 计分板计时器
    • 比较与获取分数
  • Techniques
    • 执行逻辑门
    • MBE - Max的方块实体
    • FMBE - 创建显示实体的新方法
    • 视线检测
    • 移动状态检测
    • 轨道摄像机
  • Useful Creations
    • 多人位置重排系统
      函数
    • 自定义合成台
      简单
实体
  • General
    • Intro to Entities BP
      指南
      新手
    • 实体资源包入门
      指南
      新手
    • 实体问题排查指南
      帮助
    • NPC对话系统
      中级
    • 实体事件
      新手
    • 实体属性
    • 渲染控制器
      新手
    • 生成规则
  • Tutorials
    • 任意坐标系间的坐标转换(世界、实体、骨骼)
      中级
    • 创建船只
      中级
    • 实体手持物品
      中级
    • 实体攻击机制
      中级
    • 实体睡眠机制
      中级
    • 实体碰撞体
      中级
    • 实体移动
    • 实体计时器
      中级
    • 无敌实体
      新手
    • 村庄机制实现指南
    • 检测其他实体
      中级
    • 生成已驯服的实体
      脚本
      中级
    • 视线检测实体
      中级
    • 禁用队友伤害
      中级
    • 范围效果云入门指南
      中级
    • 虚拟实体
      新手
    • 飞行实体控制
      中级
  • Documentation
    • Vanilla Usage Spawn Rules
    • 原版使用组件
    • 抛射物
    • 虚拟组件
    • 运行时标识符
    • 非生物实体运行时标识符
战利品、配方与交易
  • General
    • 交易行为
  • Documentation
    • 战利品表
    • 交易表
    • 合成配方
    • 物品函数
  • Tutorials
    • 随机化结构战利品
      简单
文档
  • Shared Constructs
  • Molang 查询详解
  • Vanilla Materials
    专家
  • 声音定义
  • 文件类型
  • 材质配置文件说明
    专家
  • 菜单分类
  • 资源包文件夹结构
  • 雾效ID
  • 高级Molang指南
方块
  • General
    • 方块入门指南
      指南
      新手
    • 方块组件
    • Block Tags
    • 方块状态
    • Block Traits
    • 方块排列组合
    • 方块事件
      脚本
    • 方块事件迁移指南
      帮助
    • 方块物品化
      中级
    • 方块问题排查指南
      帮助
  • Visuals
    • 方块剔除
      中级
    • 方块模型
      指南
      新手
      简单
    • 方块着色
      简单
    • 方块纹理动画
      中级
    • 方块纹理变体
      中级
  • Tutorials
    • Precise Interaction
      专家
      脚本
    • Precise Rotation
      专家
      脚本
    • 伪方块
      中级
    • 可旋转方块
    • 应用持续效果
      简单
      脚本
    • 矿石战利品表
      简单
      脚本
    • 规避状态值限制
      专家
  • Vanilla Re-Creations
    • 自定义作物
      中级
      脚本
    • 自定义活板门
      中级
      脚本
    • 自定义玻璃
      新手
      简单
      已弃用
    • 自定义釉面陶瓦
      简单
  • Documentation
    • 原版方块模型
      新手
    • 方块形状
    • 方块格式历史
    • 方块音效
服务器
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet 协议
    • RakNet 协议
概念
  • contents.json
  • Molang
    中级
  • Rawtext
  • textures_list.json
  • 命名空间
  • 子包
  • 文本与本地化
  • 着色器
  • 纹理图集
    中级
  • 表情符号与特殊字符
  • 覆盖资源
    中级
  • 音效
    中级
物品
  • General
    • 物品入门指南
      指南
      新手
    • 物品组件
    • 物品标签
    • 物品事件
      脚本
    • Item Event Migration
      帮助
    • 物品问题排查指南
      帮助
  • Tutorials
    • Custom Pottery Sherds
    • 可投掷物品
      中级
    • 生成物品
      中级
    • 自定义武器
      简单
    • 自定义盔甲
    • 自定义食物
      简单
      脚本
    • 通过装备物品执行命令
      实验性
      中级
    • 高分辨率物品
  • Documentation
    • 附魔
    • Numerical Item IDs
    • Vanilla Usage Components
    • 原版物品标识符
      已弃用
    • 可附着物
      新手
    • 物品格式历史记录
视觉效果
  • General
    • 实体视觉效果简介
      指南
    • 基岩版建模指南
    • 动画中的特效
    • 基于数学的动画
      中级
    • 材质
      专家
    • 材质创作
      专家
    • 皮肤包制作指南
    • 自定义死亡动画
      中级
  • Tutorials
    • Glowing Entity Texture
    • 受伤动画
      中级
    • 实体纹理动画
      中级
    • 栓绳位置调整
      简单
    • 玩家几何模型
      新手
    • 移除实体阴影
      中级
    • 重绘生成蛋纹理
      新手
  • Ideas
    • 结构展示技巧
粒子效果
  • General
    • 粒子效果入门
      指南
  • Tutorials
    • 禁用粒子效果
      新手
  • Documentation
    • 原版粒子效果
脚本编写
  • General
    • 脚本编程入门
    • 什么是Script API?
    • API 模块
  • Tutorials
    • GameTests
      实验性
    • 简易聊天命令
      实验性
    • 脚本核心功能
    • 脚本表单
      实验性
    • 脚本请求API
      实验性
    • 阻止方块放置
  • Documentation
    • JavaScript 问题排查指南
    • Script Resources
    • Script Watchdog
      实验性
    • TypeScript
    • 引擎环境
虚拟现实
  • General
    • 启用VR模式
      指南
    • 配置资源包
      专家
  • Tutorials
    • 编辑你的第一个模型
      专家

JSON UI 入门指南

guide
JSON UI 入门指南
  • 简介
    • 系统文件
    • 界面屏幕
    • 模板文件
  • UI 定义文件
  • 全局变量
  • 命名空间
  • 界面屏幕
  • UI 元素
    • 元素类型
  • 动画效果
    • 动画类型
  • 运算符使用
  • 变量系统
    • 定义变量
    • 继承变量
  • 数据绑定
    • 绑定类型
  • 条件渲染
    • 变量条件渲染
    • 绑定条件渲染
  • 字符串格式化
  • 按钮映射
    • 映射类型
    • 常用按钮ID
  • 非侵入式修改
    • 修改示例

简介 ​

WARNING

JSON UI 已被标记为弃用,建议迁移至 Ore UI。请注意,所有使用 JSON UI 的附加包在未来几年内都将失效。 与 JSON UI 不同,Ore UI 是硬编码实现的,无法通过资源包修改。

TIP

本页仅包含 JSON UI 基础概念。如需完整技术文档,请查阅 JSON UI 技术文档。

游戏用户界面采用数据驱动设计,支持自定义修改。通过 JSON UI 我们可以调整部分界面的渲染效果,甚至在一定程度上改变其交互行为。所有原版 UI 文件都存储在 RP/ui/... 目录中。

JSON UI 可能包含以下文件类型:

系统文件 ​

这些是 JSON UI 的内置文件:

  • _global_variables.json - 用于声明默认变量供后续使用
  • _ui_defs.json - 用于引用 UI 使用的文件

界面屏幕 ​

这些文件包含渲染特定界面所需的元素:

  • hud_screen.json - 显示主游戏界面,包含快捷栏等游戏元素
  • inventory_screen.json - 显示玩家物品栏界面
  • 其他屏幕文件

模板文件 ​

这些文件存储可被其他命名空间(如屏幕)复用的 UI 元素:

  • ui_common.json - 包含通用元素(如设置界面的按钮模板)
  • ui_template_*.json - 包含结构化组织的可复用元素

UI 定义文件 ​

_ui_defs.json 以数组形式引用所有 JSON UI 文件。

例如新建 RP/ui/button.json 和 RP/my_ui/main_menu.json 后,需在定义文件中如下声明:

RP/ui/\_ui_defs.json
json
{
    "ui_defs": ["ui/button.json", "my_ui/main_menu.json"]
}
1
2
3

注意事项:

  • 必须填写从资源包根目录开始的完整路径(包括 .json 扩展名)
  • 只需声明新增的自定义文件,原版文件和其他第三方 JSON UI 会自动合并
  • 支持在 RP/ui/... 目录外使用自定义路径
  • 可使用非 .json 扩展名,只要文件内容符合 JSON 格式

全局变量 ​

在 _global_variables.json 中定义变量 "$info_text_color" 并赋值为 [0.8, 0.8, 0.8]:

RP/ui/\_global_variables.json
json
{
    "$info_text_color": [0.8, 0.8, 0.8]
}
1
2
3

其他 UI 文件即可引用该变量:

vanilla/my_ui/file1.json
json
{
  "some_info": {
    ...
    "text": "你好",
    "color": "$info_text_color"
  }
}
1
2
3
4
5
6
7
vanilla/my_ui/file2.json
json
{
  "info": {
    ...
    "text": "信息",
    "color": "$info_text_color"
  }
}
1
2
3
4
5
6
7

注意事项:

  • 可在文件中定义多个变量,用逗号分隔
  • 这些变量是常量且单向传递,无法通过修改影响其他命名空间

命名空间 ​

命名空间是 UI 文件的唯一标识符,用于跨文件访问元素。新建命名空间时必须确保名称唯一。

示例:在命名空间 one 中定义元素 foobar:

vanilla/ui/file_a.json
json
{
  "namespace": "one",

  "foobar": {...}
}
1
2
3
4
5

然后在命名空间 two 中引用该元素:

vanilla/ui/file_b.json
json
{
  "namespace": "two",

  "fizzbuzz@one.foobar": {...}
}
1
2
3
4
5

跨命名空间引用需遵循格式:

json
"[元素名]@[命名空间].[被引用元素名]"
1

界面屏幕 ​

屏幕文件包含特定场景下调用的用户界面(如 inventory_screen.json 对应物品栏界面)。这些文件包含游戏直接访问的根元素。

屏幕的特殊性在于其数据只能被访问,不能被其他屏幕共享。

UI 元素 ​

UI 元素是 JSON UI 的基本数据单元。同一命名空间内元素名称必须唯一以避免冲突。

示例:创建会显示"Hello World"文本的标签元素:

vanilla/ui/example_file.json
json
{
    "test_element": {
        "type": "label",
        "text": "Hello World"
    }
}
1
2
3
4
5
6

元素类型 ​

type 属性支持的值包括:

  • label - 文本对象
  • image - 根据路径渲染图像
  • button - 可交互的点击元素
  • panel - 可重叠存放其他元素的容器
  • stack_panel - 非重叠排列元素的容器
  • grid - 以模板元素为基础生成行列布局
  • factory - 基于硬编码值和变量生成元素
  • custom - 需配合 renderer 属性使用
  • screen - 游戏直接调用的根面板元素

动画效果 ​

使用 anim_type 替代 type 可创建动画元素,这些动画可被其他非动画元素引用。

vanilla/ui/example_file.json
json
{
  "namespace": "example_nm",

  "anim_size": {
    "anim_type": "size",
    "easing": "linear",
    "from": [ "100%", 27 ],
    "to": [ "100% + 3px", 30 ],
    "duration": 1.25
  },

  "anim_alpha": {
    "anim_type": "alpha",
    "easing": "linear",
    "from": 1,
    "to": 0.5,
    "duration": 2
  },

  "test_animated_element": {
    ...
    "anims": [
      "@example_nm.anim_size",
      "@example_nm.anim_alpha"
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

动画类型 ​

anim_type 支持的动画类型:

  • alpha - 透明度动画(浮点值)
  • offset - 位移动画(数组)
  • size - 尺寸动画 [宽, 高]
  • flip_book - 翻页动画(整数值)
  • uv - UV贴图动画
  • color - 颜色动画(0.0-1.0的RGB值)
  • wait - 等待动画
  • aseprite_flip_book - 精灵表动画(详见文档)
  • clip - 裁剪动画

运算符使用 ​

JSON UI 支持在 size、offset 等属性中使用运算符,结合 $变量 和 #绑定。可用运算符包括:

运算符名称符号示例
加法+"100% + 420px" ($text + ' 我的') ($index + 2)
减法-"100% - 69px" ($text - ' 我的') ($index - 13)
乘法*($var * 9) (#value * 5)
除法/($var / 12) (#value / 2)
等于=($var = 12) ($var = '文本') (#name = '凋灵')
大于>(#value > 13)
小于<($var < 4)
大于等于>=(#value >= 2)
小于等于<=(#value <= 2)
逻辑与and($is_school and $is_open)
逻辑或or($is_cool or $is_awesome)
逻辑非not(not #name) (not (#name = 'text')) (not $name)

变量系统 ​

变量不仅限于 _global_variables.json 文件,可直接在各命名空间中使用以实现数据传递。

定义变量 ​

使用 $ 前缀声明变量,支持整数、浮点数、布尔值、字符串和数组类型:

vanilla/ui/example_file.json
json
{
  "test_element": {
    ...
    // 定义变量
    "$array_var": [10, 10],
    "$string_var": "示例文本",
    "$float_var": 1.0,
    "$template_ref": "my_button.template_button",

    // 使用变量
    "size": "$array_var",
    "text": "$string_var",
    "alpha": "$float_var",

    // 变量引用子元素
    "controls": [
      { "child@$template_ref": {} }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

继承变量 ​

变量可从其他元素继承并覆盖:

vanilla/ui/example_file.json
json
{
  "base_element": {
    ...
    "$cool_var": 1,
    "$rad_var": false
  },

  // 继承后修改部分变量
  "derived_element@base_element": {
    "$cool_var": 2  // $rad_var 保持不变
  }
}
1
2
3
4
5
6
7
8
9
10
11
12

注意:派生元素的属性会完全覆盖原元素。

数据绑定 ​

绑定用于将硬编码值关联到元素。示例:通过绑定显示硬编码文本:

vanilla/ui/example_file.json
json
{
    "label": {
        "type": "label",
        "text": "#hardtext",
        "bindings": [
            {
                "binding_name": "#hardtext"
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11

或使用绑定名覆盖:

vanilla/ui/example_file.json
json
{
    "label": {
        "type": "label",
        "text": "#display_text",
        "bindings": [
            {
                "binding_name": "#hardtext",
                "binding_name_override": "#display_text"
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

绑定类型 ​

绑定支持多种交互场景,例如根据开关状态显示面板:

json
{
  "panel": {
    ...
    "bindings": [
      {
        "binding_type": "view",
        "source_control_name": "my_toggle", // 源元素名
        "source_property_name": "#toggle_state", // 获取开关状态
        "target_property_name": "#visible" // 控制显隐
      }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

当开关激活时,#toggle_state 为 true,面板即显示。

条件渲染 ​

通过变量和绑定可以实现精细的条件渲染控制,分为变量条件渲染和绑定条件渲染两种方式。

变量条件渲染 ​

示例:当动作栏文本不是"hello world"时显示:

vanilla/ui/hud_screen.json
json
{
    "hud_actionbar_text/actionbar_message": {
        "$atext": "$actionbar_text",
        "visible": "(not ($atext = 'hello world'))"
    }
}
1
2
3
4
5
6

执行 /title @s actionbar hello world 时消息将隐藏。

绑定条件渲染 ​

示例:当标题文本不是"hello world"时显示:

RP/ui/hud_screen.json
json
{
    "hud_title_text/title_frame/title": {
        "modifications": [
            {
                "array_name": "bindings",
                "operation": "insert_back",
                "value": {
                    "binding_type": "view",
                    "source_property_name": "(not (#text = 'hello world'))",
                    "target_property_name": "#visible"
                }
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

字符串格式化 ​

JSON UI 支持多种字符串格式化操作符,假设有变量 "$var": "abcdefghijklmn":

  • '%.7s' → 取前7字符 → abcdefg
  • '%04s' → 长度≥4时返回原串 → abcdefghijklmn
  • '%7.4s' → 取4字符并左填充空格 → abcd
  • '%-7.4s' → 取4字符并右填充空格 → abcd
  • '%15s' → 长度≤15时左填充空格 → abcdefghijklmn
  • '%-15s' → 长度≤15时右填充空格 → abcdefghijklmn

按钮映射 ​

button_mappings 可重定义不同输入设备(键鼠/触摸/手柄)的控件映射:

json
{
    "sample_button@common.button": {
        "$button_id": "button_id",
        "button_mappings": [
            {
                "to_button_id": "$button_id",
                "mapping_type": "pressed"
            },
            {
                "from_button_id": "button.menu_ok",
                "to_button_id": "$button_id",
                "mapping_type": "focused"
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

映射类型 ​

  • focused - 鼠标悬停时触发
  • pressed - 点击/按压时触发
  • global - 元素存在时全局触发

常用按钮ID ​

键鼠:

按钮ID对应输入
button.menu_select鼠标左键
button.menu_secondary_select鼠标右键
button.menu_ok回车键

手柄:

按钮ID对应输入
button.controller_selectX/A键
button.menu_secondary_selectY键

非侵入式修改 ​

使用 modifications 属性可最小化修改原版 UI,提升兼容性:

操作类型描述
insert_front数组头部插入
insert_back数组尾部追加
replace替换目标元素
remove删除目标元素

修改示例 ​

在控件列表头部插入新元素:

json
{
    "array_name": "controls",
    "operation": "insert_front",
    "value": [
        {
            "new_element@namespace.template": {}
        }
    ]
}
1
2
3
4
5
6
7
8
9

替换指定绑定:

json
{
    "array_name": "bindings",
    "operation": "replace",
    "where": {
        "binding_name": "#old_binding"
    },
    "value": {
        "binding_name": "#new_binding"
    }
}
1
2
3
4
5
6
7
8
9
10

贡献者

编辑 JSON UI 入门指南

Bedrock Wiki by Bedrock OSS ,Translate by 8aka-Team

"Minecraft"是Mojang AB的注册商标。

Bedrock OSS、Bedrock Wiki以及 bedrock.dev 与Microsoft及Mojang AB不存在任何隶属关系。

  • 隐私政策
  • 加入QQ社区
  • 参与贡献指南
  • 访问代码仓库