教程:修改实体模型

教程:修改实体模型

该页面需要整理以符合格式指导。 讨论

请协助改善内容来使它符合规定。

本文章所述内容仅适用于基岩版。

目录

1 概括

1.1 所需时间

1.2 所需工具

2 入门

3 Minecraft模型格式

3.1 1.13之前的版本

3.2 1.13及之后版本

3.3 JSON语言解释

3.3.1 骨骼动画

3.4 重要注意事项

4 修改苦力怕

4.1 1.13之前的版本

4.2 结果

4.3 修改其他生物

4.4 1.13及以后版本

4.5 结果

4.6 修改其他生物

5 总结

6 导航

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

概括[编辑 | 编辑源代码]

本教程是对于高级用户编写的!普通用户可使用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,

"textureheight": 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

几何体的位置和实体模型的起点位置有关。 注: 这个点在模型的左前下角。

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

size

几何体的大小。注:16×16×16是一个方块的大小!(中文补充:它和肢体大小确实有关,但是只是用来确认肢体纹理位置的,放大用inflate见下文)

uv

这个是实体肢体纹理的起点。

注:这是规定x(横轴),y(纵轴)轴的第一个点

注:这个点应该是一个实体的某个肢体纹理的区域的左上角。

例如: 这个红点是你想做成苦力怕"body"(身体,因为是代码不译)的UV 做成点。 ("uv": [ 16, 16 ]). 身体将会使用被框起的部分作为纹理.

mirror

布尔值,可设置为true或false。如果填true,游戏会根据UV位置映射对应的部位。

inflate

使这部分肢体按数值增大或缩小(可为小数或负数),且使用的贴图的像素大小及位置不变。例如

"name": "hat",

"parent": "head",

"pivot": [ 0.0, 24.0, 0.0 ],

"cubes": [

{

"origin": [ -4.0, 24.0, -4.0 ],

"size": [ 8, 8, 8 ],

"uv": [ 32, 0 ],

"inflate": 0.5

}

inflat对应的值为0.5,则方块在x y z三轴正负方向各伸长0.5格,即这个块的大小由8×8×8变为9×9×9。对应的值为负数同理,即缩小。

骨骼动画[编辑 | 编辑源代码]

骨骼是我们创建模型的基础。在人体中,肌肉驱动骨骼的运动。在3D动画中,骨骼的运动由动画控制,而动画又会使附着在骨骼上的几何形状发生变化。

重要注意事项[编辑 | 编辑源代码]

模型还不是完全由数据驱动的。虽然可以更改模型的内容,但是仍然有一些硬编码的值,比如:一个实体需要哪些骨骼,一个实体用什么材料呈现,以及一个实体有什么动画。这意味着你不能只是把村民的几何形状复制粘贴到蜘蛛的部分。在这个系统变得更加数据驱动之前,你需要做一些实验来达到你想要的结果。

确保你的骨骼名称正确,实体的骨骼名称应该与Minecraft-vanilla资源包中的骨骼名称相同。模型的动画和渲染依赖于上述信息的正确性。

修改苦力怕[编辑 | 编辑源代码]

现在我们已经了解了Minecraft模型格式是如何设置的,让我们稍微修改一下苦力怕。我们要让它有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

总结[编辑 | 编辑源代码]

恭喜你!

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

导航[编辑 | 编辑源代码]

编 基岩版

版本

已合并

携带版

Windows 10版

移植到主机

Xbox One版

Nintendo Switch版

PlayStation 4版

已终止

Apple TV版

Gear VR版

Fire TV版

开发

版本记录

Alpha

正式版

开发版本

已移除特性

方块

配方

未使用特性

独有特性

提及特性

Super Duper图形包

计划版本

Minecraft Preview

技术性

已知漏洞

启动器

RenderDragon

数据值

实体组件

配置要求

Vibrant Visuals

光线追踪

构建信息

存档格式

动画

附加包

Molang

方块实体

命名空间ID

com.mojang

命令

函数

开发者命令

生成事件

坐标

材料

种子

专用服务器

sound_definitions.json

options.txt

常加载区域

世界加载屏幕

定义

基岩版编辑器

多人游戏

服务器

Realms Plus

服务器列表

server.properties

服务器软件

在线验证

特色功能

实验性玩法

加载提示

种子模板

角色创建器

表情

市场

精选服务器

活动服务器

VR

Ore UI

编教程

新手教程

下载、安装与购买

成功地启动游戏

菜单屏幕

游戏术语

计量单位

不该做的事

新手生存

新手指南

第一天

第二天

第三天

提示与技巧

饥饿管理

生存注意事项

庇护所

庇护所

沙漠

微型

最佳居住生物群系

最佳建筑材料

建筑与结构

房屋类型

导航

综合

无聊的时候做什么

跑酷

空置域

伪和平

节省时间的小窍门

在水下利用TNT破坏方块

成就指南[仅BE]

进度指南[仅JE]

Minecraft

下界

末地

冒险

农牧业

最佳附魔指南

拓殖

战斗

完成冒险

双持

探索洞穴

利用碰撞箱

使用地图

测量距离和角度

采矿技术

钻石

化石

远古残骸

下界快速旅行

下界传送门

支柱跳跃

幻翼防护

生成骑士

穿越和破坏基岩

防卫僵尸围城[仅JE]

考古

不可破坏的末地水晶

使用更少的末地水晶重生末影龙

透视镜

挂机池

整理物品

潜影盒储存

物品运输

生物运输

自动化烧炼

选择燃料

爆炸室

凋灵笼

光速船[仅BE]

无材料消耗转换药水类型[仅BE]

在超平坦世界中管理史莱姆

减少摔落伤害

Minecraft和教育

视频

游戏直播

村民和交易

村庄生存

创建村庄

村庄机制

治愈僵尸村民

村民养殖

村民交易所

流浪商人陷阱

建筑

给工程添加美感

空气闸

建筑术语

建造游轮

建造大都市

建造过山车

建造安全的家园

建造水建筑

建造几何体

防御

家具

电梯

带釉陶瓦的图案

建造地板

像素艺术

牧场

屋顶类型

弧形屋顶

屋顶建造指南

暗门

建造居住地

水下建筑

墙壁和桥墩

水闸

调色板

建造蹦床

挑战

获得潮涌核心

触发及战胜袭击

打败末影龙

打败凋灵

挑战自定义地图

制作自定义地图

征服结构

征服神殿和神庙

征服掠夺者前哨站

征服堡垒遗迹

征服林地府邸

征服海底神殿

征服试炼密室

征服下界要塞

征服末地城

探索深暗之域和远古城市

特殊玩法

冒险模式生存

极限模式

超极限模式

在一个地区中长期生存下去

沙漠生存

在无限沙漠中生存

下界生存

从零开始下界生存

末地生存

雷暴生存

超平坦世界生存[仅JE]

岛屿生存

空岛生存

在和平难度中收集资源

速通

游荡生存

无限石头生存

愚人节版本生存[仅JE]

22w13oneBlockAtATime

24w14potato

农场

方块和物品

紫水晶

骨粉

仙人掌

农作物(小麦、胡萝卜、马铃薯、甜菜根、火把花和瓶子草)

西瓜、南瓜

紫颂果

圆石、石头或玄武岩

可可豆

泥土

滴水石锥

鸡蛋

花朵

蛙明灯

蜂蜜

海带

蘑菇

音乐唱片

下界疣

黑曜石

袭击农场

1.21前

海泡菜

甘蔗

甜浆果

原木、树苗和苹果

海龟鳞甲

藤蔓

羊毛

药水

经验

基岩

方块和物品复制

过时方法

铁轨复制机[仅JE]

TNT复制[仅JE]

零刻作物催熟技术[仅BE]

生物

刷怪塔

怪物磨床

刷怪笼陷阱

动物(猪、牛、绵羊)

烈焰人

洞穴蜘蛛

苦力怕

闪电苦力怕

溺尸

末影人

山羊

守卫者

铁傀儡

岩浆怪

以物易物

潜影贝

史莱姆

鱿鱼

海龟

村民

女巫

流浪商人

凋灵骷髅

僵尸猪灵

悦灵

红石

基础红石

基本逻辑门

高频电路

计时器

抽奖箱

漏斗

通用物品分类器

机械

侦测器稳定器

密码锁

随机发生器

红石机械

红石音乐

红石技巧

鲁布·戈德堡机械

探测器

方块更新感应器

比较器更新感应器

昼夜探测器

矿车

矿车

火车站

储存

数字化存储系统

陷阱

陷阱

陷阱设计

雪傀儡防御炮

TNT大炮

活板门利用

活塞

活塞使用

活塞电路

无延迟科技

飞行器

半连接性[仅JE]

零刻活塞[仅JE]

无头活塞[仅JE]

高级红石

光照操纵

高级红石电路

算术逻辑

计算器

时钟

摩尔斯码

打印机

红石计算机

红石电报机

多人游戏

玩法

游玩服务器

PvP

Java版1.9前、基岩版

基地

隐藏箱子

起床战争

空岛战争

猎人游戏

服务器管理

防止恶意破坏

服务器监狱

服务器商店

雪球菜单

架设服务器

架设Java版服务器

架设基岩版服务器

服务器架设脚本[仅JE]

服务器启动脚本

FreeBSD启动脚本

OpenBSD启动脚本

Ubuntu启动脚本

WebSocket服务器[仅BE]

架设Mod服务器[仅JE]

架设Hamachi服务器

架设Spigot服务器

虚拟硬盘服务器

使用ngrok搭建服务器

架设ZeroTier服务器

本地局域网联机

服务器维护

使用LeviLamina架设服务器[仅BE]

技术性

Minecraft帮助FAQ

自定义皮肤

地图

自定义地图

下载地图

使用MCEdit刷新旧区块[仅JE]

强制打开存档[仅JE]

降级存档

资源包

制作资源包

纹理

音效和音乐

语言和文本

模型

加载资源包

数据包[仅JE]

制作数据包

实例:射线投射

视线魔法

自定义物品

安装数据包

自定义世界生成

自定义结构生成

自定义盔甲纹饰

附加包[仅BE]

基岩版开发指南

制作资源附加包

高级

基岩版实体文档

修改实体模型

制作行为包

自定义实体

自定义方块

自定义物品

自定义附加包语言文件

自定义音效

命令格式

仅Java版

生成下落的方块

文本组件

NBT命令标签

物品堆叠组件

记分板

SNBT

NBT路径

命令方块

结构方块

用命令操控实体

NBT与JSON

自定义命令触发

目标选择器

游戏安装

仅Java版

提高帧率

更新Java

修复Apache Log4j2漏洞

编写启动器

快照版本安装

获取崩溃报告

查看游戏日志

仅基岩版

Minecraft URL Scheme

汇报漏洞

在U盘中使用旧版启动器运行游戏

恢复损坏的地图数据

修复因数据包损坏的世界

在Google Drive上运行游戏

将游戏数据保存到Dropbox云端

仅限地图数据

在ChromeOS上运行Java版

过时教程

到达边境之地

获取崩溃报告(旧版)

无数据包生存

升级LWJGL

更新Minecraft

命令统计值

村民养殖(村庄与掠夺前)

村庄链

水道

水车

仅英文

自定义纹理包

基于门的铁傀儡陷阱

人工湖

矿车加速器

中继器重启系统

水梯

无延迟电路

教程

新手手册

高难度通关配装总结

成就指南

高塔指南

常见问题

教程

新手手册

基地建设指南

资源收集指南

单位阵容组合

注:作下划线标记的教程为中文原创教程。