Skip to content
是封面

《MOT 无人机实例教程》摘要

TIP

适用版本:Minecraft Java Edition 1.21.4
项目架构:MOT + MOT-Memory + MOT-Math3.1 + MOT-Perf + iframe
语言:Minecraft 函数(mcfunction)+ MOT 模板语法 + 线性代数库
目标:从零开始构建一套可遥控、可编程、可扩展的无人机系统,并支持外接设备与 GUI 交互。

我为什么要写这篇教程?

随着JAVA版1.19.4更新的物品展示实体(IDE)、文本展示实体(TDE)、方块展示实体(BDE)相关技术的兴起,原版开发者们遇到了两大迫切的现实需要:

  • 清晰的模块化管理
  • 高性能数学计算

前者以面向对象技术为代表,主要用于将多个展示实体封装为一个整体,人工规定对象格式、对象协议,并实现模块之间、对象之间的通信。

后者以局部坐标系算法、四元数算法、自动控制算法为代表,主要用于三维对象空间模型的构建,以及展示实体的transformation姿态计算,从而实现流畅、灵活、具有交互性的程序动画。

在这篇教程中你可以学习到什么?


  • mcfunction面向对象思想的实践
  • 模块协议与模块通信
  • 使用mot程序进行模板化项目构建
  • 标准化测试实践

  • 四元数与局部坐标系
  • 运动学与物理计算
  • 自动控制算法的应用

如何获取教程?

> 仓库地址:https://github.com/xiaodou8593/mot_1.0

> source_files是mcfunction模板辅助程序源文件(本项目需要用到)

> example_tutorial是教程的markdown文档(请按.mot_example.mdchapter1.mdchapter2.mdchapter3.md顺序阅读)

> example_datapack是成品数据包(项目构建过程中遇到疑惑可以进行对照)


1. 项目总览

模块功能备注
mot_uav无人机本体运动学、动力学、碰撞、静体优化、GUI
mot_lamp红石灯左右下三插槽,开关状态同步
mot_scatter六管机枪连续子弹+散射角度+音效
mot_laser激光枪冷却机制+穿透伤害
mot_mover方块搬运器读取/放置方块+NBT 保存
mot_dropper投弹器仅允许 TNT,自动引信
mot_boat栓绳船与无人机建立 leash,支持拖拽
mot_scenes展览场景状态机编排,一键演示全部设备

2. 技术亮点

类别实现说明
运动学四元数+局部坐标系10000 定点小数,角速度/线速度迭代
动力学冲量-响应系统支持多碰撞点、法向量、弹性系数
静体优化冻结静止实体节省算力,火焰图验证
设备协议_sync_request / _sync_coord / _use_signal三插槽即插即用
GUIiframe 背包替换视线追踪+权限物品+按钮事件
控制程序状态机+组合程序高度/旋转/位移/瞄准/等待/连接/断开
子弹模块子实体递归粒子+伤害+穿透方块
编号池模块级 free_addr避免 int 上限,支持动态注册/注销
性能perf 管线集成if_block 仅 4~5 条记分板开销

3. 无人机控制程序清单

程序功能状态
height定高悬停0/1/2
rotation偏航角锁定0/1/2
position水平位移0/1/2
facing瞄准目标点0/1/2
compose多程序串行0/1/2
up / turn / forward瞬时增量转存为以上程序
left_connect / left_deconnect / left_use左插槽0/-1/2
down_* / right_*另两插槽同上
waiting等待 N 刻倒计时
landing / near_landing近地着陆自动修正高度

4. 外接设备插槽坐标

插槽局部坐标 (u,v,w)说明
left(2500,0,0)无人机左侧 0.25 格
down(0,-2500,0)无人机下方 0.25 格
right(-2500,0,0)无人机右侧 0.25 格

> 设备只需实现 _sync_request / _sync_coord / _use_signal 即可被自动识别。


5. 生成设备实例

生成无人机

mcfunction
# 导入数据模板
data modify storage mot_uav:io input set from storage mot_uav:class test
# 指定生成位置
tp @e[tag=math_marker,limit=1] 0 0 0
data modify storage mot_uav:io input.position set from entity @e[tag=math_marker,limit=1] Pos
# 解析数据模板,构造实例
function mot_uav:_new

生成机枪

mcfunction
# 导入数据模板
data modify storage mot_scatter:io input set from storage mot_scatter:class test
# 指定生成位置
tp @e[tag=math_marker,limit=1] 0 0 0
data modify storage mot_scatter:io input.position set from entity @e[tag=math_marker,limit=1] Pos
# 解析数据模板,构造实例
function mot_scatter:_new

> 构造其它设备实例的方法同上


通用测试场景

mcfunction
function mot_uav:test/general/start

瞄准测试场景

mcfunction
function mot_uav:test/facing/start

一键展览场景

mcfunction
function mot_scenes:exhibition/start

Powered by Vitepress and Github Pages