05. 模型与动画(Blockbench 工作流)¶
枪的外观由两个文件决定:几何模型(geo_models/gun/<id>_geo.json)和动画(animations/<id>.animation.json),两者都是基岩版(Bedrock)格式。
5.1 为什么要用基岩格式¶
TaCZ 借用了基岩版的"几何模型 + 动画"体系(和 GeckoLib 生态一致):
- 模型:
format_version: "1.10.0",由bones(骨骼)+ 每根骨骼的cubes(方块)组成; - 动画:
format_version: "1.8.0",按骨骼名做旋转/位移的关键帧。
Blockbench 从零开始太慢。最省事的路线是:
- 打开默认枪包的某个 geo 文件(或下载别人的枪包);
- 在 Blockbench 里导入它 → 你就得到了骨架 + UV 布局;
- 改骨骼里的方块(cubes)形状 → 外形变了;
- 导出覆盖自己的
<id>_geo.json。
5.2 Blockbench 操作清单¶
| 步骤 | 操作 |
|---|---|
| 装插件 | Blockbench → 文件 → 插件 → 搜索 Bedrock Model(多数版本已内置) |
| 新建/导入 | 新建时选 Bedrock Model;或 文件 → 导入 → Bedrock 几何模型 导入默认枪的 geo |
| 骨骼(Bone) | 每个可动部件一根骨骼:slide(枪机)、magazine(弹匣)、bolt、trigger、muzzle(枪口) |
| 方块(Cube) | 挂在骨骼下;用 pivot(轴心)决定旋转中心——弹匣的 pivot 必须在枪身上,不在弹匣上,否则旋转时位置会飞 |
| UV | 用 UV 编辑器分配贴图区域,避免两块几何抢同一片 UV(会互相染色) |
| 贴图 | 文件 → 新建贴图,尺寸用 2 的幂(512/1024),命名 <id>.png |
| 导出 | 文件 → 导出 → Bedrock 几何模型 → 得到 <id>_geo.json |
⚠️ 导航坐标别自己发明:导入默认枪的 geo,看它的骨骼朝向和 pivot 是怎么摆的,照抄结构最稳。
5.3 动画文件长什么样¶
{
"format_version": "1.8.0",
"animations": {
"animation.m4a1.idle": {
"loop": true,
"bones": {
"root": { "rotation": { "0.0": [0, 0, 0] } }
}
},
"animation.m4a1.shoot": {
"loop": false,
"bones": {
"slide": {
"position": {
"0.0": [0, 0, 0],
"0.05": [0, 0, -1.5],
"0.15": [0, 0, 0]
}
}
}
}
}
}
- 键是"时间点"(秒,字符串),值是
[x, y, z]; loop: true用于待机/行走这类循环动画;- 位移用
position,旋转用rotation,缩放用scale; - 一根骨骼只能被同一个动画里的一段关键帧驱动。
5.4 常见动画名(硬约定)¶
TaCZ 按名字去找对应时机的动画,名字对不上 = 动画不播:
| 动画名(常见) | 触发时机 |
|---|---|
idle / static_idle |
手持待机(static_idle 通常是不动状态) |
shoot |
开火 |
reload_tactical / reload_empty |
战术换弹 / 空仓换弹 |
mag_standard / mag_ext / mag_ext_2、mag_ext_3 |
装弹匣动作(普通 / 扩容各档) |
draw / put_away |
切出 / 收起 |
inspect |
检视武器 |
walk / sprint / aim |
行走 / 冲刺 / 开镜姿态 |
melee_* |
近战(刺刀等) |
bolt / slide |
拉栓/上膛类动作 |
⚠️ 不同版本/不同枪种的模板不完全一样。以默认枪包(
tacz/tacz_default_gun)里的动画文件为准,把它当字典用。
5.5 新枪"没动画"时的救急写法¶
如果你还没做动画,先在 display 里写:
"use_default_animation": "rifle"
TaCZ 就会用本体步枪的动画模板兜底——先让枪"有动作",再逐步替换成自己的动画。
5.6 模型/动画常见坑¶
| 现象 | 原因 | 解决 |
|---|---|---|
| 模型完全看不到 | geo 没导出 / format_version 不是 1.10.0 / 路径错 |
检查 geo_models/gun/<id>_geo.json 与 display 的 model |
| 模型在手里"错位" | pivot 位置不对 |
对照默认枪的 pivot 重新摆 |
| 枪口位置不对 | muzzle 骨骼位置不对 |
枪口骨骼要放在枪管末端 |
| 动画不播 | 动画名/骨骼名对不上 | 抄默认枪命名;先用 use_default_animation 验证 |
| 动画播了但穿模 | 关键帧位移过大 / 轴心不对 | 减小区间、修正 pivot |
| 贴图花/串色 | 两个 cube 抢同一片 UV | UV 编辑器里重新分配 |
| 第三人称看着不对 | third_person_animation / transform.scale.thirdperson |
单独调这两项 |
| 改完没变化 | 没重进游戏 / 缓存 | 重进游戏或重启服务端 |
💡 调试顺序:先"有模型"(哪怕是个方块)→ 再"位置对"(不穿手、枪口对)→ 再"有动画"(默认模板兜底)→ 最后"换成自己的动画"。一次只解决一件事。