该页面需要整理以符合格式指导。 讨论
请协助改善内容来使它符合规定。
本文章所述内容仅适用于基岩版。
目录
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
命令统计值
村民养殖(村庄与掠夺前)
村庄链
水道
水车
仅英文
自定义纹理包
基于门的铁傀儡陷阱
人工湖
矿车加速器
中继器重启系统
水梯
无延迟电路
教程
新手手册
高难度通关配装总结
成就指南
高塔指南
常见问题
教程
新手手册
基地建设指南
资源收集指南
单位阵容组合
注:作下划线标记的教程为中文原创教程。