附加包教程:12.模型
前言
上期,我们学习了所有方块组件。由于上期留下了一些疑问,我打算先解决这些疑问,再继续讲方块。
今天我们来学习上次开头频繁提到的一个词——模型
模型结构
打开资源包根目录,打开models文件夹. 打开blocks文件夹。这里用于存放方块模型。
退到models文件夹下,打开entity文件夹,这里用于存放实体模型。然而,这都不是固定的,你想把方块模型放实体文件夹里,把实体模型放方块文件夹里,也没什么不行。
总之,怎么开心怎么来。
::: tip 提示
模型文件一般不是手写出来的,而是程序生成的。模型文件的后缀是.json
,与其他文件一样。
:::
下面,我放一段上次的教程,帮助回忆和理解。
"minecraft:geometry": "geometry.custom_block" //这里的geometry.custom_block就是模型ID,以后会说到。
现在我们就来说说这个模型ID是什么。
随便打开一个别人做的模型文件,你就明白了。这里我放一个我做的在下面。
{
"format_version": "1.12.0", //代码格式版本
"minecraft:geometry": [ //这个数组里存储了若干个模型
{ //一个模型
"description": {
"identifier": "geometry.test_block", //这里的geometry.test_block就是模型ID,不能与其他模型ID重复,必须以geometry.开头。
"texture_width": 16, //纹理宽度
"texture_height": 16, //纹理高度
"visible_bounds_width": 2,
"visible_bounds_height": 1.5,
"visible_bounds_offset": [0, 0.25, 0]
},
"bones": [ //这个数组里有若干个立方体组
{
"name": "bb_main", //模型名字
"pivot": [0, 0, 0], //枢轴点,用于旋转时的中心点
"cubes": [ //这个数组里有若干个立方体
{ //一个立方体
"origin": [-6.83283, -1.41096, -1], //立方体的起始点
"size": [2, 2, 2], //立方体的大小
"pivot": [-5, 2, 1], //立方体的枢轴点(也就是旋转的中心)
"rotation": [-34.34782, 11.23074, 2.64456], //立方体的旋转角度
"uv": { //立方体的纹理uv占用
"north": {"uv": [0, 0], /*这个数组表示占用纹理的起始点*/ "uv_size": [2, 2] /*这个数组表示占用纹理的大小*/ }, //下同。
"east": {"uv": [0, 0], "uv_size": [2, 2]},
"south": {"uv": [0, 0], "uv_size": [2, 2]},
"west": {"uv": [0, 0], "uv_size": [2, 2]},
"up": {"uv": [2, 2], "uv_size": [-2, -2]},
"down": {"uv": [2, 2], "uv_size": [-2, -2]}
}
}
]
}
]
}
]
}
用 这个程序可以生成一个模型文件和动画文件(建议电脑打开,手机也可以)
物品渲染变换
在基岩版 1.21.20 中加入了一项功能,物品渲染变换,仅对方块模型有效,可以指定这个方块作为物品时的渲染设置。渲染设置可以控制方块在物品栏UI里、玩家头上、第一人称左手上、第一人称右手上、第三人称左手上、第三人称右手上、作为物品漂浮在地面上和物品展示框中的大小、旋转和缩放。
以下是代码,这个对象应该与 bones 对象同级。
"item_display_transforms": {
"gui": {
"translation": [0, 0, 0],
"rotation": [30, 225, 0],
"scale": [0.625, 0.625, 0.625],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0],
"fit_to_frame": true
},
"firstperson_righthand": {
"translation": [0, 0, 0],
"rotation": [0, 45, 0],
"scale": [0.4, 0.4, 0.4],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"firstperson_lefthand": {
"translation": [0, 0, 0],
"rotation": [0, -135, 0],
"scale": [0.4, 0.4, 0.4],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"thirdperson_righthand": {
"translation": [0, 2.5, 0],
"rotation": [75, 45, 0],
"scale": [0.375, 0.375, 0.375],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"thirdperson_lefthand": {
"translation": [0, 2.5, 0],
"rotation": [75, 45, 0],
"scale": [0.375, 0.375, 0.375],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"ground": {
"translation": [0, 3.0, 0],
"rotation": [0, 0, 0],
"scale": [0.25, 0.25, 0.25],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"fixed": {
"translation": [0, 0, 0],
"rotation": [0, 0, 0],
"scale": [0.5, 0.5, 0.5],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
},
"head": {
"translation": [0, 0, 0],
"rotation": [0, 0, 0],
"scale": [1, 1, 1],
"rotation_pivot": [0, 0, 0],
"scale_pivot": [0, 0, 0]
}
}
字段 | 功能描述 | 类型 |
---|---|---|
item_display_transforms | 在不同情况下方块的渲染。 | 对象 |
gui | 在物品栏或快捷栏中时。 | 对象 |
firstperson_righthand | 第一人称右手时。 | 对象 |
firstperson_lefthand | 第一人称左手时。 | 对象 |
thirdperson_righthand | 第三人称右手时。 | 对象 |
thirdperson_lefthand | 第三人称左手时。 | 对象 |
ground | 作为物品在地面漂浮时。 | 对象 |
fixed | 在物品展示框中时。 | 对象 |
head | 戴在玩家头部时。 | 对象 |
translation | 平移,其中数值的范围是[-80.0, 80.0]。 | 数组 |
rotation | 旋转,其中数值的范围是[-360.0, 360.0]。 | 数组 |
scale | 缩放,其中数值的范围是[0.0, 4.0]。 | 数组 |
rotation_pivot | 旋转枢轴点,其中数值的范围是[-80.0, 80.0]。 | 数组 |
scale_pivot | 缩放枢轴点,其中数值的范围是[-80.0, 80.0]。 | 数组 |
fit_to_frame | 是否平移并缩放到物品栏中单个物品的边框。 | 布尔值 |
总结
下一期,我们简单讲讲战利品表。