文档托管解决方案

附加包教程:12.模型

附加包教程: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是否平移并缩放到物品栏中单个物品的边框。布尔值

总结

下一期,我们简单讲讲战利品表。

目录导航

更多文档