# 制作3D盔甲 > 温馨提示:开始阅读这篇指南之前,我们希望你对《我的世界》基岩版附加包有一定了解,有能力撰写 JSON 数据格式,并能够独立阅读《我的世界》开发者官网-开发指南或其他技术引用文档。 本文将帮助你添加一套拥有独立骨骼的 3D 盔甲,并且帮助你修改原版盔甲。(强烈建议阅读之前先阅读第一节课的内容,因为思路一样) 本文假定你熟悉 Molang、渲染控制器、动画和实体定义有基本的了解。本文不涉及美术资源的相关教程,如果对此感兴趣的同学可以自行学习和了解。 在本教程中,您将学习以下内容。 - ✅3D 盔甲的制作原理; - ✅如何修改原版盔甲; ## 成果展示 这节课我们将添加一套自定义骨骼的 3D 盔甲: ![](./assets/image-20231124151500984.png) 以及我们在尝试修改原版的盔甲之后,所有的原版盔甲都改变了造型(以钻石甲为例): ![](./assets/image-20231126141604269.png) 可以看到头盔上多了一个问号,肚子也鼓起来了,然后鞋子上多了一个骨骼。(别喷.. 我也觉得丑..) ## 3D 盔甲的制作方法 跟我们的 3D 武器是一个思路,还是存在两种方法。一种是作为额外的骨骼,用渲染控制器来条件渲染,这需要代码配合。由于盔甲一般比较简单,所以我们这里不介绍了。 重点还是介绍第二种 attachable 的方法。 ### 3D 盔甲模型原理 我们这里先在内容库「偷」一套 3D 盔甲的模型: ![](./assets/image-20231126181256641.png) 这里先随便选择一套盔甲模型,打开: ![](./assets/image-20231126181413356.png) 我们在第一节课中介绍过,这里 3D 盔甲的关键就是**对齐原版的玩家骨骼**,如果你不熟悉的话,可以打开原版的玩家骨骼进行检查(下列是玩家模型骨骼树状图,锚点即模型格式内的 pivot): ```text -root(锚点:[0, 0, 0]) --waist(锚点:[0, 12, 0]) ---jacket(用于persona) ---cape(披风) ---body(锚点:[0, 24, 0]) ----leftArm(锚点:[5, 22, 0]) -----leftSleeve(用于persona) -----leftItem(锚点:[6, 15, 1]) ----rightArm(锚点:[-5, 22, 0]) -----rightSleeve(用于persona) -----rightItem(锚点:[-6, 15, 1]) --leftLeg(锚点:[1.9, 12, 0]) ---leftPants(用于persona) --rightLeg(锚点:[-1.9, 12, 0]) ---rightPants(用于persona) ``` 只要骨骼在对应的骨骼组下方,且锚点对应的,那么 3D 盔甲就可以完美继承玩家的骨骼。所以我们在一番检查之后发现这个骨骼存在以下问题: - 首先是少了根骨骼组 `root`,我们给加上; - 其次是左右腿的继承关系错了,原版是继承在 `waist` 下,而这个模型是继承在了 `body` 下面; - 再然后就是左右腿的 `pivot` 反了,原版左腿(`leftLeg`)是 `1.9`,而该模型左腿是 `-1.9`,右腿也是同理。 一番检查之后,我们就可以按照一般装备的划分,把骨骼拆成对应的四个部分就行了: ![](./assets/image-20231126182318172.png) 注意上图中的骨骼对应关系。然后导出模型到资源包的 `modles\entity\` 目录下即可。 ### attachable 文件 接下来新增 `attachable` 文件让物品与骨骼对应就可以,下面列举一下四个文件。除了骨骼和 `scripts` 中的内容不一样外,其余都是相同的。 头部 helmet: ```json { "format_version": "1.10", "minecraft:attachable": { "description": { "identifier": "tutorial:custom_armor_helmet", "materials": { "default": "armor", "enchanted": "armor_enchanted" }, "textures": { "default": "textures/models/tutorial_custom_armor", "enchanted": "textures/misc/enchanted_item_glint" }, "geometry": { "default": "geometry.custom_armor_helmet" }, "scripts": { "parent_setup": "variable.helmet_layer_visible = 0.0;" }, "render_controllers": [ "controller.render.armor" ] } } } ``` 盔甲 chestplate: ```json { "format_version": "1.10", "minecraft:attachable": { "description": { "identifier": "tutorial:custom_armor_chestplate", "materials": { "default": "armor", "enchanted": "armor_enchanted" }, "textures": { "default": "textures/models/tutorial_custom_armor", "enchanted": "textures/misc/enchanted_item_glint" }, "geometry": { "default": "geometry.custom_armor_chestplate" }, "scripts": { "parent_setup": "variable.helmet_layer_visible = 0.0;" }, "render_controllers": [ "controller.render.armor" ] } } } ``` 绑腿 leggings: ```json { "format_version": "1.10", "minecraft:attachable": { "description": { "identifier": "tutorial:custom_armor_leggings", "materials": { "default": "armor", "enchanted": "armor_enchanted" }, "textures": { "default": "textures/models/tutorial_custom_armor", "enchanted": "textures/misc/enchanted_item_glint" }, "geometry": { "default": "geometry.custom_armor_leggings" }, "scripts": { "parent_setup": "variable.helmet_layer_visible = 0.0;" }, "render_controllers": [ "controller.render.armor" ] } } } ``` 鞋子 boots: ```json { "format_version": "1.10", "minecraft:attachable": { "description": { "identifier": "tutorial:custom_armor_boots", "materials": { "default": "armor", "enchanted": "armor_enchanted" }, "textures": { "default": "textures/models/tutorial_custom_armor", "enchanted": "textures/misc/enchanted_item_glint" }, "geometry": { "default": "geometry.custom_armor_boots" }, "scripts": { "parent_setup": "variable.helmet_layer_visible = 0.0;" }, "render_controllers": [ "controller.render.armor" ] } } } ``` ### 进入游戏测试 不出意外的话,进入游戏穿戴好装备,就可以看到实际的效果了: ![](./assets/image-20231126182907228.png) 并且因为骨骼组跟玩家完美适配的情况下,玩家原版的动画也完美适配(比如游泳): ![游泳动画演示](./assets/2_1.gif) ## 原版盔甲的修改方法 其实原版的盔甲模型,我们也是可以修改的。原版玩家的盔甲模型位于原版资源包 `models\entity\player_armor.json`: ![](./assets/image-20231126183125264.png) 我们复制一份到我们的项目对应目录中,然后使用 BlockBench 打开,发现这文件中有很多骨骼: ![](./assets/image-20231126183332640.png) 我们只需要处理第一个就可以了,打开: ![](./assets/image-20231126183640077.png) 这个就是原版盔甲的骨骼了,由于需要适配原版的贴图,所以我们先来导入一下原版的纹理,下面是目录: ![](./assets/image-20231126183729470.png) 这里需要导入两个,`_1` 结尾的是不包含绑腿的贴图,`_2` 结尾的是包含绑腿的贴图: ![](./assets/image-20231126183821545.png) 然后我们就可以在这个框架内任意的增加骨骼了,只需要注意适配原版的贴图就可以,比如我们就胡乱改成了这样: ![](./assets/image-20231126183912027.png) 进入游戏查看效果: ![](./assets/image-20231126141604269.png) ## 小结 不管是自定义的 3D 盔甲模型还是修改原版的模型,我们发现都是需要在原版的骨骼架构内完成。 所以只需要注意这一点就行了。 修改原版骨骼这一点,是给大家留了一点可以想象的空间,可以自由发挥一下。 ## 课后作业 本次课后作业,内容如下: - 制作一套属于自己的 3D 盔甲; - 修改原版的盔甲模型文件,在游戏中查看效果;