Minecraft Wiki

除另有声明,转载时均必须注明出处若簡繁轉換出錯,請以遊戲內為準请勇于扩充与修正内容有兴趣逛逛我们的微博沟通交流,欢迎到社区专页需要协助,请在告示板留言

了解更多

Minecraft Wiki
注册
Advertisement
Brush
该文章需要整理以符合格式指导 讨论

请帮助优化文章格式来让它符合格式指导。

Information icon
此特性为基岩版独有。

本教程是对官方支持的附加包来修改的。

概括

本教程是对于高级用户编写的!普通用户请不要轻易尝试! 请您熟悉JSON的数据格式。如果您并不熟悉的话,请阅读行为附加包教程的JSON部分。在本教程中,我们将涉及:

  • Minecraft的JSON模型格式
  • 如何去修改模型

所需时间

30 分钟

所需工具

一个文本编辑器

任何的文本编辑器应该都是可以的,但是我们建议您使用用于编程的IDE软件。Notepad++是一个优秀且免费还带有多编程语言高亮显示支持的编辑器。你可以在 这里下载Notepad++ 。

入门

在本教程中我们将使苦力怕有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语言解释

geometry.entity 这个是要修改的实体的名称
texturewidth 宽度单位,1个像素
textureheight 长度单位,1个像素
bones 骨骼模型运动的动画,它包含了使几何体运转的信息。注:但这也有局限性,他只能使包含在源代码骨骼动画清单的骨骼部分运。
name 骨骼动画的名称
pivot 轴位置是实体肢体的旋转中心。例如:苦力怕的头是能绕着这一点旋转的方形构成。
rotation 旋转实体的部分在xyz轴上。注: 游戏可能会以动画覆盖包含动画的对象。
mirror 布尔值,可设置为true或false。如果填true,游戏会根据UV位置映射对应的肢体。
cubes 如果几何没有骨骼动画,写入此关键符并键入要映射的动画肢体名,即可赋予几何动画。
origin 几何体的位置和实体模型的起点位置有关。 注: 这个点在模型的左前下角。

例如: 这个苦力怕身体的红色顶点,就是这个身体的模型位置。

CMEMPicture 7
size 几何体的大小。注: 16x16x16是一个方块的大小!(中文补充:它和肢体大小确实有关,但是只是用来确认肢体材质位置的,放大用inflate见下文)
uv 这个是实体肢体材质的起点。

注:这是规定x(横轴),y(纵轴)轴的第一个点 注:这个点应该是一个实体的某个肢体材质的区域的左上角。 例如: 这个红点是你想做成苦力怕"body"(身体,因为是代码不译)的UV 做成点。 ("uv": [ 16, 16 ]). 身体将会使用被框起的部分作为材质.

CMEMPicture 6
mirror 布尔值,可设置为true或false。如果填true,游戏会根据UV位置映射对应的部位。
inflate 使这部分肢体成倍数增大(可为小数或负数)

骨骼动画

骨骼是我们用来制作模型的。把它想象成一具骷髅!在人体中,骨骼是由肌肉运动的,而你的肌肉也随着肌肉运动。在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坐标我们没有给新头像添加不同的纹理。

结果

CMEMPicture 10

三个头的 苦力怕[1].

修改其他生物

如果要更改另一个实体的模型,请确保在右大括号后面加上逗号 geometry.creeper.

伪代码示例

别忘了逗号!(红色突出显示)

{
  "geometry.creeper": {
    // model stuff
  },
  "geometry.chicken": {
    // model stuff
  }
}


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坐标我们没有给新头像添加不同的纹理。

结果

CMEMPicture 10

三个头的 苦力怕[2].

修改其他生物

* 回到你新建的models/entity文件夹中。
* 新建一个名字叫生物的英文.geo.json并重复以上操作。如cow.geo.json

总结

恭喜你!

如果您已经做到了这一点,那么现在您应该已经知道了制作您自己的实体模型所需要知道的一切!

Advertisement