本教程是对官方支持的附加包来修改的。
概括
本教程是对于高级用户编写的!普通用户请不要轻易尝试! 请您熟悉 JSON 的数据格式。如果您并不熟悉的话,请阅读行为附加包教程的JSON部分。 在本教程中,我们将涉及:
- Minecraft的JSON模型格式
- 如何去修改模型
所需时间
30 分钟
所需工具
一个文本编辑器
任何的文本编辑器应该都是可以的,但是我们建议您使用用于编程的IDE软件。Notepad++ 是一个优秀且免费还带有多编程语言高亮显示支持的编辑器。你可以在 这儿 下载Notepad++ 。
入门
在本教程中我们将使 爬行者 有3个头。但是在修改 爬行者 之前,我们来看看组成模型的代码。
Minecraft模型格式
Minecraft的实体建模由JSON语言编程,模型由models/mobs.json.以及models/entity.中的所有.json文件决定。你可以在Minecraft vanilla资源包找到它
Win10版:Vanilla Resource Pack/models/mobs.json.和,
Vanilla Resource Pack/models/entity.
Adnroid1.13版和网易中国版:安装包:/assets/recourse_parks/models/mobs.json.和,
安装包:/assets/recourse_parks/models/entity.
这些文件包含了所有Minecraft中实体的模型代码。
- (注意!在基岩版1.13版本中村民在mobs.json和entity文件夹中的代码不再是geometry.villager而是geometry.npc)
模型代码们看起来是这个样子的:
- 实体模板的伪代码
"geometry.entityname": {
"texturewidth": x,
"textrueheight": y,
"bones": [
{
"name": "body part name",
"pivot": [ x, y, z ],
"cubes": [
{
"origin": [ x, y, z ],
"size": [ x, y, z ],
"uv": [ x, y ]
}
]
}
]
}
注: 这只是一个参考例子,不是一个可用的实体模型。使用它作为代码是没用的!
骨骼动画
骨骼是我们用来制作模型的。把它想象成一具骷髅!在人体中,骨骼是由肌肉运动的,而你的肌肉也随着肌肉运动。在3D动画中,骨骼是由动画移动的,而动画反过来又会移动附着在骨骼上的几何图形!
重要注意事项
模型还不是完全由数据驱动的。虽然可以更改模型的内容,但是仍然有一些硬编码的值,比如:一个实体需要哪些骨骼,一个实体用什么材料呈现,以及一个实体有什么动画。这意味着你不能只是复制和粘贴几何形状从村民到蜘蛛部分,并希望它工作!在这个系统变得更加数据驱动之前,您需要做一些实验来达到您想要的结果!
确保你的骨骼名称正确!实体的骨骼名称应该与Minecraft-vanilla资源包中的骨骼名称相同。模型的动画和渲染依赖于上述信息的正确性!
修改爬行者
现在我们已经了解了Minecraft模型格式是如何设置的,让我们稍微修改一下creeper。我们要让他有3个正面,2个在底部,1个堆在顶部,像金字塔一样。
1.13及以后版本
- 首先,在Vanilla Minecraft的Vanilla包里找到
models/entity/creeper.geo.json打开,并复制它的全部内容 - 在资源包中创建一个名为
models的文件夹 - 接着创建一个名为
entity的文件夹 - 创建一个名为
creeper.geo.json的新json文件并将其保存到entity文件夹中。 - 打开你新建的
creeper.geo.json然后粘贴你复制的内容,它看起来应该是这样的
{
"format_version": "1.8.0",
"geometry.creeper": {
"visible_bounds_width": 1,
"visible_bounds_height": 2,
"visible_bounds_offset": [ 0, 0.75, 0 ],
"texturewidth": 64,
"textureheight": 32,
"bones": [
{
"name": "body",
"cubes": [
{
"origin": [ -4.0, 6.0, -2.0 ],
"size": [ 8, 12, 4 ],
"uv": [ 16, 16 ]
}
]
},
{
"name": "head",
"parent": "body",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -4.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
]
},
{
"name": "leg0",
"parent": "body",
"pivot": [ -2.0, 6.0, 4.0 ],
"cubes": [
{
"origin": [ -4.0, 0.0, 2.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
]
},
{
"name": "leg1",
"parent": "body",
"pivot": [ 2.0, 6.0, 4.0 ],
"cubes": [
{
"origin": [ 0.0, 0.0, 2.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
]
},
{
"name": "leg2",
"parent": "body",
"pivot": [ -2.0, 6.0, -4.0 ],
"cubes": [
{
"origin": [ -4.0, 0.0, -6.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
]
},
{
"name": "leg3",
"parent": "body",
"pivot": [ 2.0, 6.0, -4.0 ],
"cubes": [
{
"origin": [ 0.0, 0.0, -6.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
]
}
]
},
"geometry.creeper.charged": {
"visible_bounds_width": 1,
"visible_bounds_height": 2,
"visible_bounds_offset": [ 0, 0.75, 0 ],
"texturewidth": 64,
"textureheight": 32,
"bones": [
{
"name": "body",
"cubes": [
{
"origin": [ -4.0, 6.0, -2.0 ],
"size": [ 8, 12, 4 ],
"uv": [ 16, 16 ]
}
],
"inflate": 2.0
},
{
"name": "head",
"parent": "body",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -4.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
],
"inflate": 2.0
},
{
"name": "leg0",
"parent": "body",
"pivot": [ -2.0, 6.0, 4.0 ],
"cubes": [
{
"origin": [ -4.0, 0.0, 2.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
],
"inflate": 2.0
},
{
"name": "leg1",
"parent": "body",
"pivot": [ 2.0, 6.0, 4.0 ],
"cubes": [
{
"origin": [ 0.0, 0.0, 2.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
],
"inflate": 2.0
},
{
"name": "leg2",
"parent": "body",
"pivot": [ -2.0, 6.0, -4.0 ],
"cubes": [
{
"origin": [ -4.0, 0.0, -6.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
],
"inflate": 2.0
},
{
"name": "leg3",
"parent": "body",
"pivot": [ 2.0, 6.0, -4.0 ],
"cubes": [
{
"origin": [ 0.0, 0.0, -6.0 ],
"size": [ 4, 6, 4 ],
"uv": [ 0, 16 ]
}
],
"inflate": 2.0
}
]
}
}
- 现在,让我们先把它原来的头向左移一点。为了做到这一点,我们要改变骨头命名的原点的x分量"
head." 从 -4 到 -8. - 现在将 "
cubes" 复制到 "head."的方括号中。这时文本应该是灰色的。
- creeper.geo.json – geometry.creeper – head section
{
"name": "head",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -8.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
]
},
- 在你复制的行后面加上一个逗号。
- 粘贴你在逗号后面复制的行
- 在刚刚粘贴的行后面加一个逗号
- 在新逗号后再次粘贴复制的行
- 你现在应该有3对大括号在 "
cubes." 每个都有一个原点,大小和uv对象 - 在复制的第一行中,我们将把原点的x分量从-8改变为0,向右移动
- 在第二个副本中,将原点的x分量改为-4,y分量改为26
- 爬行者的头部部分现在应该看起来像(新文本为灰色):
- creeper.geo.json – geometry.creeper – head section
{
"name": "head",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -8.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
},
{
"origin": [ 0.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
},
{
"origin": [ -4.0, 26.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
]
},
注意,我们不需要改变新头像的UV因为我们复制了旧头像的UV坐标我们没有给新头像添加不同的纹理。
结果
修改其他生物
* 回到你新建的models/entity文件夹中。 * 新建一个名字叫生物的英文.geo.json并重复以上操作。如cow.geo.json
1.13之前的版本
- 首先,在Vanilla Minecraft的Vanilla包里
mobs.json找到geometry.creeper区复制下来。Vanilla Resource Pack/models/mobs.json
- 在资源包中创建一个名为
models的文件夹 - 创建一个名为
mobs.json的新json文件并将其保存到新模型文件夹中。 - 输入一对大括号(
{ })在你新建的mobs.json然后粘贴geometry.creeper。 - 现在,让我们先把它原来的头向左移一点。为了做到这一点,我们要改变骨头命名的原点的x分量"
head" 从 -4 到 -8. - 现在将 "
cubes" 复制到 "head"的方括号中。. 这时文本应该是灰色的。
- mobs.json – geometry.creeper – head section
{
"name": "head",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -8.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
]
},
- 在你复制的行后面加上一个逗号。
- 粘贴你在逗号后面复制的行
- 在刚刚粘贴的行后面加一个逗号
- 在新逗号后再次粘贴复制的行
- 你现在应该有3对大括号在 "
cubes" 每个都有一个原点,大小和uv对象 - 在复制的第一行中,我们将把原点的x分量从-8改变为0,向右移动
- 在第二个副本中,将原点的x分量改为-4,y分量改为26
- 爬行者的头部部分现在应该看起来像(新文本为灰色):
- mobs.json – geometry.creeper – head section
{
"name": "head",
"pivot": [ 0.0, 18.0, 0.0 ],
"cubes": [
{
"origin": [ -8.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
},
{
"origin": [ 0.0, 18.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
},
{
"origin": [ -4.0, 26.0, -4.0 ],
"size": [ 8, 8, 8 ],
"uv": [ 0, 0 ]
}
]
},
注意,我们不需要改变新头像的UV因为我们复制了旧头像的UV坐标我们没有给新头像添加不同的纹理。
结果
修改其他生物
如果要更改另一个实体的模型,请确保在右大括号后面加上逗号 geometry.creeper.
- 伪代码示例
别忘了逗号!(红色突出显示)
{
"geometry.creeper": {
// model stuff
},
"geometry.chicken": {
// model stuff
}
}
总结
恭喜你!
如果您已经做到了这一点,那么现在您应该已经知道了制作您自己的实体模型所需要知道的一切!
| 版本 |
| ||||||
|---|---|---|---|---|---|---|---|
| 开发 |
| ||||||
| 技术性 | |||||||
| 多人游戏 | |||||||
| 特色功能 | |||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||


