帮助中心 / 首页

教师出题指南

本文面向老师,说明如何用场景编辑器制作一个 3D 编程闯关关卡。

1. 打开编辑器

  • 直接访问:https://3d.lebiantiku.com/editor
  • 编辑已有:https://3d.lebiantiku.com/editor?token=<关卡token>
  • 机构老师也可以从机构端「教学后台 → 3D 编程闯关」进入,或在关卡列表中点击「编辑」。

提示:读取与保存关卡都需要登录;保存还需要具备关卡管理权限。

2. 编辑器界面

编辑器左侧是实时 3D 预览,右侧是表单,分为几个页签:

页签 用途
关卡信息 关卡 token、名称、排序、前置关卡 ID、是否启用、介绍与提示
图元 新增立方体 / 球体 / 圆柱 / 圆锥 / 平面 / 目标标记 / 外部模型
物体 编辑每个物体的 id、名称、静态与否、位置、旋转、缩放、颜色(模型还可填 URL),以及删除
场景 场景版本、相机位置与注视点、光照
判定规则 组合逻辑与若干判定条件
导出 JSON 查看并复制 scene_json / check_rule_json
  • 新增的图元默认加入「可移动物体」(spawnObjects),即受程序控制;在「物体」页把「静态」打开即可变为布景。
  • 「目标标记」会以一块静态细扁方块加入场景(objects),常用于 collision 判定。
  • 「外部模型」会加入一个 model 类型物体,默认指向内置示例模型,可在「物体」页修改模型 URL(GLB / GLTF)。模型加载失败会自动降级为立方体,不会阻断关卡。

3. scene_json 结构

{
  "scene_version": 1,
  "camera": { "pos": [10, 10, 14], "lookAt": [0, 0.5, 0] },
  "lights": [
    { "type": "ambient", "color": "#ffffff", "intensity": 0.75 },
    { "type": "directional", "color": "#ffffff", "intensity": 1.2, "position": [8, 14, 10] }
  ],
  "objects": [
    { "id": "ground", "name": "地面", "type": "plane", "isStatic": true,
      "position": [0, 0, 0], "rotation": [0, 0, 0], "scale": [16, 1, 16], "color": "#2b3a55" }
  ],
  "spawnObjects": [
    { "id": "robot", "name": "机器人", "type": "cube", "isStatic": false,
      "position": [-4, 0.5, 3], "rotation": [0, 0, 0], "scale": [1, 1, 1], "color": "#4a90d9" }
  ]
}

字段说明:

  • objects:静态布景(默认静止,脚本不可修改);spawnObjects:动态物体(可被脚本 / 拖拽操作)。
  • type 取值:cube / sphere / cylinder / cone / plane,以及外部模型 model(模型需额外提供 url)。
  • position / rotation(角度制)/ scale 均为长度为 3 的数组。
  • color 形如 #rrggbb。
  • 物理:在 scene_json 顶层增加 "physics": { "enabled": true, "gravity": [0, -9.82, 0] } 即对本关启用物理模拟——动态物体会受重力影响下落、与静态物体碰撞并停在上面。该字段目前需直接写在 scene_json 中(编辑器暂未提供可视化开关)。物理为按需加载,未启用时不会加载物理引擎。

4. check_rule_json 结构

{
  "logic": "AND",
  "conditions": [
    { "type": "position",  "objId": "robot", "target": [4, 0.5, -3], "tolerance": 0.8 },
    { "type": "rotation",  "objId": "robot", "axis": "y", "target": 90, "tolerance": 5 },
    { "type": "color",     "objId": "robot", "target": "#00ff00", "tolerance": 24 },
    { "type": "collision", "objId": "robot", "targetObjId": "goal", "tolerance": 0.1 },
    { "type": "count",     "objId": "*", "scope": "dynamic", "target": 3 }
  ]
}
  • logic:AND(全部满足,默认)或 OR(满足任一)。
  • 判定条件为空时视为不通过。

五类判定条件与默认容差

类型 含义 关键字段 默认容差
position 物体位置到达目标点(三维距离 ≤ 容差) objId、target:[x,y,z] 0.8
rotation 绕某轴旋转到目标角度(考虑 360° 环绕) objId、axis(x/y/z)、target(度) 5
color 物体颜色匹配(逐通道最大差值 ≤ 容差) objId、target(#rrggbb) 24
collision 两物体碰撞(中心距离 ≤(半径之和 ×(1+容差))) objId、targetObjId 0.1
count 物体数量达标 scope(all/dynamic)、target(整数) 0

提示:条件里的 tolerance 可留空表示使用上表默认值;数值越小要求越精确。碰撞判定使用物体的包围球半径近似,适合「大致接触」的场景。

5. 解锁(前置关卡)

  • 在「关卡信息」页填写前置关卡 ID:填写后,学生必须先通关该前置关卡才能进入本关。
  • 前置关卡 ID 为 0(留空)表示无需前置,直接解锁。
  • 注意:这里填写的是关卡 ID(数字),不是关卡 token。

6. 保存与发布

  1. 在「关卡信息」页填好关卡名称(必填)。
  2. 点击右上角「保存关卡」。首次保存会自动生成 token(形如 lv-xxxxxxxxxx),并同步到地址栏。
  3. 在「是否启用」中控制关卡是否对学生可见。
  4. 保存后即可在关卡列表(按排序从小到大)看到该关卡。

提示:机构老师通过机构端「教学后台」创建的关卡归属本机构,学生登录后只在对应机构下可见;平台公共关卡对所有学生可见。

7. 出题小建议

  • 先搭好地面 + 目标,再放动态物体,最后配判定规则,预览确认画面后再保存。
  • 目标位置建议与场景中的可见参照物对齐,并给出合理的容差,避免过严导致学生无法通关。
  • 每关只聚焦一个知识点(移动 / 旋转 / 颜色 / 碰撞 / 循环),循序渐进。
  • 完成一个关卡后,把它作为下一关的前置关卡,形成一条学习路径。

相关阅读