本教程是对官方支持的附加包来修改的。
概括[]
本教程是对于高级用户编写的!普通用户可使用Blockbench等易于使用的可视化模型制作软件。请你熟悉JSON的数据格式。如果你并不熟悉的话,请阅读行为附加包教程的JSON部分。在本教程中,我们将涉及:
- Minecraft的JSON模型格式
- 如何去修改模型
所需时间[]
30 分钟
所需工具[]
一个文本编辑器
任何的文本编辑器应该都是可以的,但是我们建议你使用用于编程的IDE软件。如果你想有效管理多个文件,建议使用Visual Studio Code。而在iOS上,用Textcode Viewer则是不错的选择,如果你的iOS设备已经越狱,也可以尝试使用iFile或者Filza。对于Android系统来讲,MT管理器将是一个不错的选择。
入门[]
在本教程中我们将使苦力怕有3个头。但是在修改苦力怕之前,我们来看看组成模型的代码。
Minecraft模型格式[]
1.13之前的版本[]
Minecraft的实体建模由JSON语言编程,模型由mobs.json
这个.json文件决定。你可以在Vanilla Minecraft资源包找到它,路径为Vanilla Resource Pack/models/mobs.json
。这些文件包含了所有Minecraft中实体的模型代码。模型代码们看起来是这个样子的:
- 实体模板的伪代码
"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 ] } ] } ] }
注: 这只是一个参考例子,不是一个可用的实体模型。使用它作为代码是没用的!
1.13及之后版本[]
Minecraft的模型仍然由JSON语言编写,不过从models/mobs.json
的单一文件变为如图的文件结构。可以在Vanilla Resource Pack/models/entity
中找到它们。生物模型被从mobs.json中分离为单一文件,命名方式为name(实体名称).geo.json
,但仍有部分实体被留在了mobs.json中。
JSON语言解释[]
骨骼动画[]
骨骼是我们用来制作模型的。把它想象成一具骷髅!在人体中,骨骼是由肌肉运动的,而你的肌肉也随着肌肉运动。在3D动画中,骨骼是由动画移动的,而动画反过来又会移动附着在骨骼上的几何图形!
重要注意事项[]
模型还不是完全由数据驱动的。虽然可以更改模型的内容,但是仍然有一些硬编码的值,比如:一个实体需要哪些骨骼,一个实体用什么材料呈现,以及一个实体有什么动画。这意味着你不能只是复制和粘贴几何形状从村民到蜘蛛部分,并希望它工作!在这个系统变得更加数据驱动之前,你需要做一些实验来达到你想要的结果!
确保你的骨骼名称正确!实体的骨骼名称应该与Minecraft-vanilla资源包中的骨骼名称相同。模型的动画和渲染依赖于上述信息的正确性!
修改苦力怕[]
现在我们已经了解了Minecraft模型格式是如何设置的,让我们稍微修改一下creeper。我们要让他有3个正面,2个在底部,1个堆在顶部,像金字塔一样。
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 } }
1.13及以后版本[]
- 首先,在原版资源包里找到
models/entity/creeper.geo.json
,将其复制进你的资源包中的models/entity/
- 打开
creeper.geo.json
,它看起来应该是这样的:
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
总结[]
恭喜你!
如果你已经做到了这一点,那么现在你应该已经知道了制作你自己的实体模型所需要知道的一切!
版本 |
| ||||||
---|---|---|---|---|---|---|---|
开发 |
| ||||||
技术性 | |||||||
多人游戏 | |||||||
特色功能 |
|
语言