# 制作3D盔甲
温馨提示:开始阅读这篇指南之前,我们希望你对《我的世界》基岩版附加包有一定了解,有能力撰写 JSON 数据格式,并能够独立阅读《我的世界》开发者官网-开发指南或其他技术引用文档。
本文将帮助你添加一套拥有独立骨骼的 3D 盔甲,并且帮助你修改原版盔甲。(强烈建议阅读之前先阅读第一节课的内容,因为思路一样)
本文假定你熟悉 Molang、渲染控制器、动画和实体定义有基本的了解。本文不涉及美术资源的相关教程,如果对此感兴趣的同学可以自行学习和了解。
在本教程中,您将学习以下内容。
- ✅3D 盔甲的制作原理;
- ✅如何修改原版盔甲;
# 成果展示
这节课我们将添加一套自定义骨骼的 3D 盔甲:
以及我们在尝试修改原版的盔甲之后,所有的原版盔甲都改变了造型(以钻石甲为例):
可以看到头盔上多了一个问号,肚子也鼓起来了,然后鞋子上多了一个骨骼。(别喷.. 我也觉得丑..)
# 3D 盔甲的制作方法
跟我们的 3D 武器是一个思路,还是存在两种方法。一种是作为额外的骨骼,用渲染控制器来条件渲染,这需要代码配合。由于盔甲一般比较简单,所以我们这里不介绍了。
重点还是介绍第二种 attachable 的方法。
# 3D 盔甲模型原理
我们这里先在内容库「偷」一套 3D 盔甲的模型:
这里先随便选择一套盔甲模型,打开:
我们在第一节课中介绍过,这里 3D 盔甲的关键就是对齐原版的玩家骨骼,如果你不熟悉的话,可以打开原版的玩家骨骼进行检查(下列是玩家模型骨骼树状图,锚点即模型格式内的 pivot):
-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
,右腿也是同理。
一番检查之后,我们就可以按照一般装备的划分,把骨骼拆成对应的四个部分就行了:
注意上图中的骨骼对应关系。然后导出模型到资源包的 modles\entity\
目录下即可。
# attachable 文件
接下来新增 attachable
文件让物品与骨骼对应就可以,下面列举一下四个文件。除了骨骼和 scripts
中的内容不一样外,其余都是相同的。
头部 helmet:
{
"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:
{
"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:
{
"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:
{
"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"
]
}
}
}
# 进入游戏测试
不出意外的话,进入游戏穿戴好装备,就可以看到实际的效果了:
并且因为骨骼组跟玩家完美适配的情况下,玩家原版的动画也完美适配(比如游泳):
# 原版盔甲的修改方法
其实原版的盔甲模型,我们也是可以修改的。原版玩家的盔甲模型位于原版资源包 models\entity\player_armor.json
:
我们复制一份到我们的项目对应目录中,然后使用 BlockBench 打开,发现这文件中有很多骨骼:
我们只需要处理第一个就可以了,打开:
这个就是原版盔甲的骨骼了,由于需要适配原版的贴图,所以我们先来导入一下原版的纹理,下面是目录:
这里需要导入两个,_1
结尾的是不包含绑腿的贴图,_2
结尾的是包含绑腿的贴图:
然后我们就可以在这个框架内任意的增加骨骼了,只需要注意适配原版的贴图就可以,比如我们就胡乱改成了这样:
进入游戏查看效果:
# 小结
不管是自定义的 3D 盔甲模型还是修改原版的模型,我们发现都是需要在原版的骨骼架构内完成。
所以只需要注意这一点就行了。
修改原版骨骼这一点,是给大家留了一点可以想象的空间,可以自由发挥一下。
# 课后作业
本次课后作业,内容如下:
- 制作一套属于自己的 3D 盔甲;
- 修改原版的盔甲模型文件,在游戏中查看效果;