BEFORE YOU BUILD
这堂课,学的是“成组运动”。
用现代美式六管加特林的辨识轮廓,做一件 Minecraft 风格游戏外观模型。所有参数都是任意建模单位;不对应现实尺寸,也不制作内部机构。枪管用实心方块,深色端面只是像素造型。
准备 Blockbench 5.x,选择 Generic Model / 通用模型。第一次使用可先做南瓜灯入门课。
下载 5 个阶段工程 · 35 KB ↓01-body-shell.bbmodel13 部件 · 3 分组 · 0 动画02-six-barrels.bbmodel54 部件 · 4 分组 · 0 动画03-textured-details.bbmodel65 部件 · 5 分组 · 0 动画04-rotating-barrels.bbmodel65 部件 · 5 分组 · 1 动画05-finished-two-speeds.bbmodel65 部件 · 5 分组 · 2 动画
阶段工程预嵌纹理方便观察。软件截图是在本机中文版 Blockbench 打开相应阶段拍摄的,不是从空白工程连续录屏;结构示意图另行标注。请先另存自己的练习副本。
新建工程,确定一条轴
先决定哪边是前,再决定绕哪里转。
- 新建 Generic Model,命名
my_gatling_prop,纹理设为 64 × 64,使用逐面 UV,先保存 .bbmodel。 - 前端朝 +X,Y 表示高度,Z 表示厚度。建立最外层 Display,Pivot 设为 0 / 10 / 0。
- Display 下先建 Body 与 Handles。打开阶段 01 可以对照主轮廓:一共 13 个方块、3 个分组。
- 中央看轮廓,右侧大纲看 Body 与 Handles。
- 先保存自己的副本,再开始调整。
先搭不动的主体
先用大块把体积交代清楚。
- Body 中建立
body_main,Position −13 / 6 / −4,Size 11 / 8 / 8,Rotation 为 0 / 0 / 0。 - 用顶部、底部、后盖与两侧贴片分出层次。Position 是方块起点,不是中心;部件 Pivot 按参数表保留。
- Handles 中添加两根上方立柱、一块提把和两个后部握把轮廓。它们与主体一起静止,不放进 Rotor。
- 右侧显示当前方块的位置、尺寸和枢轴。
- Body 与 Handles 不添加旋转关键帧。

13 个主体与提把部件参数
| 部件 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| body_main Body | -13 / 6 / -4 | 11 / 8 / 8 | 0 / 0 / 0 | -7.5 / 10 / 0 | 0 / 0 / 16 / 16 |
| body_top Body | -12 / 14 / -3 | 9 / 1.2 / 6 | 0 / 0 / 0 | -7.5 / 14.6 / 0 | 16 / 0 / 32 / 16 |
| body_bottom Body | -12 / 4.8 / -3 | 9 / 1.2 / 6 | 0 / 0 / 0 | -7.5 / 5.4 / 0 | 32 / 0 / 48 / 16 |
| back_cap Body | -14.5 / 6.5 / -3.5 | 1.5 / 7 / 7 | 0 / 0 / 0 | -13.75 / 10 / 0 | 0 / 16 / 16 / 32 |
| side_near Body | -11 / 7 / 4 | 7 / 5 / 0.8 | 0 / 0 / 0 | -7.5 / 9.5 / 4.4 | 16 / 0 / 32 / 16 |
| side_far Body | -11 / 7 / -4.8 | 7 / 5 / 0.8 | 0 / 0 / 0 | -7.5 / 9.5 / -4.4 | 16 / 0 / 32 / 16 |
| front_collar Body | -2 / 5 / -5 | 2 / 10 / 10 | 0 / 0 / 0 | -1 / 10 / 0 | 0 / 16 / 16 / 32 |
| mount_shape Body | -8 / 2.8 / -2 | 3 / 2 / 4 | 0 / 0 / 0 | -6.5 / 3.8 / 0 | 32 / 0 / 48 / 16 |
| top_post_back Handles | -11 / 15 / -0.8 | 1.2 / 3.5 / 1.6 | 0 / 0 / 0 | -10.4 / 16.75 / 0 | 0 / 16 / 16 / 32 |
| top_post_front Handles | -4 / 15 / -0.8 | 1.2 / 3.5 / 1.6 | 0 / 0 / 0 | -3.4 / 16.75 / 0 | 0 / 16 / 16 / 32 |
| top_grip Handles | -11 / 18.5 / -1 | 8.2 / 1.6 / 2 | 0 / 0 / 0 | -6.9 / 19.3 / 0 | 32 / 16 / 48 / 32 |
| rear_grip_near Handles | -16 / 7 / 2 | 1.5 / 6 / 1.5 | 0 / 0 / 0 | -15.25 / 10 / 2.75 | 32 / 16 / 48 / 32 |
| rear_grip_far Handles | -16 / 7 / -3.5 | 1.5 / 6 / 1.5 | 0 / 0 / 0 | -15.25 / 10 / -2.75 | 32 / 16 / 48 / 32 |
六根枪管,围成一圈
复制六次之前,先找准六个位置。
在 Display 下建立 Rotor。六根长方体的长度都沿 X:Size 为 23 / 1.5 / 1.5。它们围绕 Y=10、Z=0 排列,中心距为 3.2 个虚拟建模单位。下表给的是中心;填 Position 时,Y、Z 各减 0.75,X 填 0。
| 部件 | 中心 Y | 中心 Z |
|---|---|---|
| barrel_1 | 13.2 | 0 |
| barrel_2 | 11.6 | 2.771 |
| barrel_3 | 8.4 | 2.771 |
| barrel_4 | 6.8 | 0 |
| barrel_5 | 8.4 | -2.771 |
| barrel_6 | 11.6 | -2.771 |
例如 barrel_1 的 Position 为 0 / 12.45 / −0.75。端部小方块、深色端面和亮条也跟随各自枪管排列。两圈装饰框各有 8 块,单块 X 旋转按 0°、45°…315° 设置;这里是外观装饰,不是现实机构。
- 阶段 02 共 54 个部件,新增 41 个 Rotor 部件。
- 绕端面观察,六根枪管之间要有间隔。

Rotor 全部 41 个部件的参数与 UV
| 部件 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| rotor_core Rotor | 0 / 9.4 / -0.6 | 23 / 1.2 / 1.2 | 0 / 0 / 0 | 11.5 / 10 / 0 | 32 / 0 / 48 / 16 |
| barrel_1 Rotor | 0 / 12.45 / -0.75 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 13.2 / 0 | 16 / 16 / 32 / 32 |
| barrel_tip_1 Rotor | 21 / 12.25 / -0.95 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 13.2 / 0 | 0 / 16 / 16 / 32 |
| barrel_cap_1 Rotor | 23.11 / 12.65 / -0.55 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 13.2 / 0 | 32 / 16 / 48 / 32 |
| barrel_marker_1 Rotor | 3 / 13.96 / -0.18 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 14.01 / 0 | 16 / 32 / 32 / 48 |
| barrel_2 Rotor | 0 / 10.85 / 2.021 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 11.6 / 2.771 | 16 / 16 / 32 / 32 |
| barrel_tip_2 Rotor | 21 / 10.65 / 1.821 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 11.6 / 2.771 | 0 / 16 / 16 / 32 |
| barrel_cap_2 Rotor | 23.11 / 11.05 / 2.221 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 11.6 / 2.771 | 32 / 16 / 48 / 32 |
| barrel_marker_2 Rotor | 3 / 12.36 / 2.591 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 12.41 / 2.771 | 48 / 16 / 64 / 32 |
| barrel_3 Rotor | 0 / 7.65 / 2.021 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 8.4 / 2.771 | 16 / 16 / 32 / 32 |
| barrel_tip_3 Rotor | 21 / 7.45 / 1.821 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 8.4 / 2.771 | 0 / 16 / 16 / 32 |
| barrel_cap_3 Rotor | 23.11 / 7.85 / 2.221 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 8.4 / 2.771 | 32 / 16 / 48 / 32 |
| barrel_marker_3 Rotor | 3 / 9.16 / 2.591 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 9.21 / 2.771 | 48 / 16 / 64 / 32 |
| barrel_4 Rotor | 0 / 6.05 / -0.75 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 6.8 / 0 | 16 / 16 / 32 / 32 |
| barrel_tip_4 Rotor | 21 / 5.85 / -0.95 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 6.8 / 0 | 0 / 16 / 16 / 32 |
| barrel_cap_4 Rotor | 23.11 / 6.25 / -0.55 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 6.8 / 0 | 32 / 16 / 48 / 32 |
| barrel_marker_4 Rotor | 3 / 7.56 / -0.18 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 7.61 / 0 | 48 / 16 / 64 / 32 |
| barrel_5 Rotor | 0 / 7.65 / -3.521 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 8.4 / -2.771 | 16 / 16 / 32 / 32 |
| barrel_tip_5 Rotor | 21 / 7.45 / -3.721 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 8.4 / -2.771 | 0 / 16 / 16 / 32 |
| barrel_cap_5 Rotor | 23.11 / 7.85 / -3.321 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 8.4 / -2.771 | 32 / 16 / 48 / 32 |
| barrel_marker_5 Rotor | 3 / 9.16 / -2.951 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 9.21 / -2.771 | 48 / 16 / 64 / 32 |
| barrel_6 Rotor | 0 / 10.85 / -3.521 | 23 / 1.5 / 1.5 | 0 / 0 / 0 | 11.5 / 11.6 / -2.771 | 16 / 16 / 32 / 32 |
| barrel_tip_6 Rotor | 21 / 10.65 / -3.721 | 2.1 / 1.9 / 1.9 | 0 / 0 / 0 | 22.05 / 11.6 / -2.771 | 0 / 16 / 16 / 32 |
| barrel_cap_6 Rotor | 23.11 / 11.05 / -3.321 | 0.08 / 1.1 / 1.1 | 0 / 0 / 0 | 23.15 / 11.6 / -2.771 | 32 / 16 / 48 / 32 |
| barrel_marker_6 Rotor | 3 / 12.36 / -2.951 | 17 / 0.1 / 0.36 | 0 / 0 / 0 | 11.5 / 12.41 / -2.771 | 48 / 16 / 64 / 32 |
| band_rear_1 Rotor | 1 / 13.8 / -1.8 | 2 / 1 / 3.6 | 0 / 0 / 0 | 2 / 14.3 / 0 | 0 / 16 / 16 / 32 |
| band_rear_2 Rotor | 1 / 12.541 / 1.241 | 2 / 1 / 3.6 | 45 / 0 / 0 | 2 / 13.041 / 3.041 | 0 / 16 / 16 / 32 |
| band_rear_3 Rotor | 1 / 9.5 / 2.5 | 2 / 1 / 3.6 | 90 / 0 / 0 | 2 / 10 / 4.3 | 0 / 16 / 16 / 32 |
| band_rear_4 Rotor | 1 / 6.459 / 1.241 | 2 / 1 / 3.6 | 135 / 0 / 0 | 2 / 6.959 / 3.041 | 0 / 16 / 16 / 32 |
| band_rear_5 Rotor | 1 / 5.2 / -1.8 | 2 / 1 / 3.6 | 180 / 0 / 0 | 2 / 5.7 / 0 | 0 / 16 / 16 / 32 |
| band_rear_6 Rotor | 1 / 6.459 / -4.841 | 2 / 1 / 3.6 | 225 / 0 / 0 | 2 / 6.959 / -3.041 | 0 / 16 / 16 / 32 |
| band_rear_7 Rotor | 1 / 9.5 / -6.1 | 2 / 1 / 3.6 | 270 / 0 / 0 | 2 / 10 / -4.3 | 0 / 16 / 16 / 32 |
| band_rear_8 Rotor | 1 / 12.541 / -4.841 | 2 / 1 / 3.6 | 315 / 0 / 0 | 2 / 13.041 / -3.041 | 0 / 16 / 16 / 32 |
| band_front_1 Rotor | 17 / 13.8 / -1.8 | 2 / 1 / 3.6 | 0 / 0 / 0 | 18 / 14.3 / 0 | 0 / 16 / 16 / 32 |
| band_front_2 Rotor | 17 / 12.541 / 1.241 | 2 / 1 / 3.6 | 45 / 0 / 0 | 18 / 13.041 / 3.041 | 0 / 16 / 16 / 32 |
| band_front_3 Rotor | 17 / 9.5 / 2.5 | 2 / 1 / 3.6 | 90 / 0 / 0 | 18 / 10 / 4.3 | 0 / 16 / 16 / 32 |
| band_front_4 Rotor | 17 / 6.459 / 1.241 | 2 / 1 / 3.6 | 135 / 0 / 0 | 18 / 6.959 / 3.041 | 0 / 16 / 16 / 32 |
| band_front_5 Rotor | 17 / 5.2 / -1.8 | 2 / 1 / 3.6 | 180 / 0 / 0 | 18 / 5.7 / 0 | 0 / 16 / 16 / 32 |
| band_front_6 Rotor | 17 / 6.459 / -4.841 | 2 / 1 / 3.6 | 225 / 0 / 0 | 18 / 6.959 / -3.041 | 0 / 16 / 16 / 32 |
| band_front_7 Rotor | 17 / 9.5 / -6.1 | 2 / 1 / 3.6 | 270 / 0 / 0 | 18 / 10 / -4.3 | 0 / 16 / 16 / 32 |
| band_front_8 Rotor | 17 / 12.541 / -4.841 | 2 / 1 / 3.6 | 315 / 0 / 0 | 18 / 13.041 / -3.041 | 0 / 16 / 16 / 32 |
把会转的部件放在一起
枢轴像一根看不见的线,把动作串起来。
加入 Details 的 11 个像素装饰,得到 65 个方块、5 个分组。选 Rotor,把分组 Pivot 设为 0 / 10 / 0。分组基础旋转保持 0 / 0 / 0,后面在时间线上加动作。
Display ├─ Body 静止外壳 ├─ Handles 静止提把 ├─ Details 静止装饰 └─ Rotor 41 个部件一起绕 X 旋转 ├─ 六根枪管、端面和亮条 ├─ 两圈装饰框 └─ 中央造型块
- Rotor 的 Pivot 是 0 / 10 / 0。
- 外壳、提把、侧面装饰不属于 Rotor。
11 个外壳像素装饰参数
| 部件 / 分组 | Position | Size | Rotation ° | Pivot | UV |
|---|---|---|---|---|---|
| stripe_near Details | -10.5 / 8.5 / 4.81 | 6 / 1 / 0.12 | 0 / 0 / 0 | -7.5 / 9 / 4.87 | 0 / 32 / 16 / 48 |
| stripe_far Details | -10.5 / 8.5 / -4.93 | 6 / 1 / 0.12 | 0 / 0 / 0 | -7.5 / 9 / -4.87 | 0 / 32 / 16 / 48 |
| status_near Details | -5 / 11 / 4.81 | 1.4 / 0.6 / 0.13 | 0 / 0 / 0 | -4.3 / 11.3 / 4.875 | 32 / 32 / 48 / 48 |
| status_far Details | -5 / 11 / -4.94 | 1.4 / 0.6 / 0.13 | 0 / 0 / 0 | -4.3 / 11.3 / -4.875 | 32 / 32 / 48 / 48 |
| pixel_bolt_near_1 Details | -10.5 / 7.4 / 4.82 | 0.6 / 0.6 / 0.22 | 0 / 0 / 0 | -10.2 / 7.7 / 4.93 | 48 / 16 / 64 / 32 |
| pixel_bolt_near_2 Details | -5 / 7.4 / 4.82 | 0.6 / 0.6 / 0.22 | 0 / 0 / 0 | -4.7 / 7.7 / 4.93 | 48 / 16 / 64 / 32 |
| pixel_bolt_far_1 Details | -10.5 / 7.4 / -5.04 | 0.6 / 0.6 / 0.22 | 0 / 0 / 0 | -10.2 / 7.7 / -4.93 | 48 / 16 / 64 / 32 |
| pixel_bolt_far_2 Details | -5 / 7.4 / -5.04 | 0.6 / 0.6 / 0.22 | 0 / 0 / 0 | -4.7 / 7.7 / -4.93 | 48 / 16 / 64 / 32 |
| back_pixel_top Details | -14.7 / 12 / -1.2 | 0.2 / 0.7 / 2.4 | 0 / 0 / 0 | -14.6 / 12.35 / 0 | 48 / 16 / 64 / 32 |
| back_pixel_bottom Details | -14.7 / 7 / -1.2 | 0.2 / 0.7 / 2.4 | 0 / 0 / 0 | -14.6 / 7.35 / 0 | 48 / 16 / 64 / 32 |
| side_badge Details | -9 / 10 / 4.83 | 2 / 1.4 / 0.12 | 0 / 0 / 0 | -8 / 10.7 / 4.89 | 48 / 0 / 64 / 16 |
用亮色留下观察标记
重复的形状,需要一个容易认出的记号。
- 导入
textures/gatling-palette.png,把灰绿色给外壳,蓝灰色给六管,最深色给端面。 - 进入绘画模式,观察 64×64 图集。用 1 像素亮边区分转折,不必把每块都涂得很亮。
barrel_marker_1用黄色,其余五根亮条用浅灰。六根完全一样时难以看出转动,唯一的黄色标记能帮你跟踪一整圈。

第一行外壳;第二行金属与端面;第三行黄色标记与青色点缀;第四行备用创作色。
本课共享 16×16 色块,像素密度不是严格的原版展开标准。
- 黄色亮条跟着 Rotor 旋转,侧面条纹保持静止。
- 修改一个共享色块会影响所有引用它的面。
检查 UV 与正面轮廓
贴图和排列,都值得换个角度检查。
回到编辑模式,选 body_main,左侧 UV 对应 0 / 0 / 16 / 16。barrel_1 用 16 / 16 / 32 / 32,黄色标记用 16 / 32 / 32 / 48。这是 U1 / V1 / U2 / V2 四个边界值,不是位置加宽高。
- 选中 body_main,左侧第一行第一个色块高亮。
- 本课每个方块六面使用相同色块。

从 0° 转到 360°
最后一帧不是退回去,而是走完这一圈。
- 切换动画模式,新建
gatling.spin,长度 2 秒,循环选 Loop。 - 选 Rotor,只在 Rotation 轨道添加关键帧。X 依次为 0、90、180、270、360;Y、Z 一直为 0。时间依次为 0、0.5、1、1.5、2 秒。
- 全部插值设为 Linear / 线性,然后播放。枪身与提把不动,只有枪管组连续旋转。
- 先选动画,再选 Rotor 查看轨道。
- 2 秒一圈只是网页与教程观察速度,不是实物参数。
最后一帧写 360°,就会从 270° 继续向前;写回 0° 会让最后一段倒着转。循环边界的两个姿态相同,所以可以接成连续运动。
2 秒旋转 · 全部 5 个关键帧
| 分组 | 轨道 | 时间 / 秒 | X / Y / Z |
|---|---|---|---|
| Rotor | rotation | 0 | 0 / 0 / 0 |
| Rotor | rotation | 0.5 | 90 / 0 / 0 |
| Rotor | rotation | 1 | 180 / 0 / 0 |
| Rotor | rotation | 1.5 | 270 / 0 / 0 |
| Rotor | rotation | 2 | 360 / 0 / 0 |
加一段慢速,检查循环
慢一点,才看得清哪里需要调整。
- 复制动画为
gatling.spin_slow,长度改成 4 秒。五个关键帧移到 0、1、2、3、4 秒;X 角度仍是 0、90、180、270、360。 - 切换两段动画,观察黄色标记:正常展示 2 秒一圈,慢速 4 秒一圈。不要叠加播放两段。
- 保存自己的副本,重新打开,确认纹理、Rotor 枢轴与两段动画仍然存在。网页里关闭“视角自动旋转”,能更容易验证枪身真的没有动。
- 左侧保留 gatling.spin 和 gatling.spin_slow。
- 暂停动画是暂停枪管;关闭自动旋转是固定观察视角。
4 秒慢速观察 · 全部 5 个关键帧
| 分组 | 轨道 | 时间 / 秒 | X / Y / Z |
|---|---|---|---|
| Rotor | rotation | 0 | 0 / 0 / 0 |
| Rotor | rotation | 1 | 90 / 0 / 0 |
| Rotor | rotation | 2 | 180 / 0 / 0 |
| Rotor | rotation | 3 | 270 / 0 / 0 |
| Rotor | rotation | 4 | 360 / 0 / 0 |

换一条亮色,再观察一整圈。
把黄色观察标记换成青色,外壳换成低饱和沙色。只改材质,不动枢轴和关键帧,练习让“设计变化”和“动画结构”互不干扰。
IF SOMETHING LOOKS ODD
转得不对,先看这四处。
为什么整件模型一起转?
网页的自动旋转控制视角,先关掉它。若 Blockbench 里枪身也转,检查关键帧是不是加在 Display 上;本课只给 Rotor 加动画。
为什么枪管像风车一样甩出去?
枢轴或旋转轴不对。Rotor Pivot 是 0 / 10 / 0,动画只改变 X,Y/Z 保持 0;不要用 Y 旋转代替长轴旋转。
为什么最后一段突然倒转?
确认最后一帧 X 是 360,不是 0;五帧按时间递增,插值为 Linear,动画循环为 Loop。首尾数值可以不同,但姿态要相同。
能直接作为 Minecraft 武器使用吗?
不能把 .bbmodel 当 MOD 安装。本课只有通用外观模型与展示动画,没有射击、装填、伤害或物品注册逻辑;游戏内使用需要匹配版本、导出格式与加载方案。
KEEP LEARNING
继续练习。
独立创作的游戏美术教学,不是实物机构复刻。个人学习、课堂及非商业创作可用;请勿原样二次售卖或冒充原创。