Files
netease-modsdk-wiki/docs/mcguide/20-玩法开发/15-自定义游戏内容/1-自定义物品/9-自定义3D物品/1-自定义3D物品(一).md
2025-03-18 14:46:12 +08:00

179 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Json配置自定义3D物品
在本节教程中,我们将围绕**如何自定义一个3D物品**的话题教给大家如何仅使用JSON配置和附加包开发知识来快速创建你的第一个3D物品。
> 温馨提示开始读起这篇指南前我们希望你对《我的世界》基岩版附加包有一定了解有能力撰写JSON数据格式并能够独立阅读《我的世界》开发者官网-开发指南或其他技术引用文档。
**通过这节教程,你将学会:**
•如何将一个现有的微软基岩版格式物品模型变为自定义物品的3D模型。
•校对模型在模型空间的相对位置,以匹配并固定在玩家第三人称的手持位置。
## 背景介绍
模组API 2.0 (基岩版版本 1.17.2开始在资源包定义物品的附着物Attachable文件可以绑定微软原版模型至物品上。
## 制作模型规范
让人型生物(如 溺尸、尸壳、僵尸 或 玩家手持3D物品模型时我们推荐使模型骨骼遵守玩家模型骨骼布局。以便模型能优先保证在玩家手持的情况下能够跟随肢体动画进行正常的幅度摆动。
原版玩家模型使用一条root根骨骼作为基骨骼子骨骼内使用waist骨骼控制上半身rightLeg骨骼和leftLeg骨骼控制左腿和右腿。
基岩版标识符推荐以小写数字母搭配下划线因为在游戏中使用rightLeg或rightleg效果是一致的。以下是玩家模型的骨骼树状图锚点即模型格式内的pivot。
```
-root锚点[0, 0, 0]
--waist锚点[0, 12, 0]
---jacket用于persona
---cape披风
---body锚点[0, 24, 0]
----leftArm锚点[5, 22, 0]
-----leftSleeve用于persona
-----leftItem锚点[6, 15, 1]
----rightArm锚点[-5, 22, 0]
-----rightSleeve用于persona
-----rightItem锚点[-6, 15, 1]
--leftLeg锚点[-1.9, 12, 0]
---leftPants用于persona
--rightLeg锚点[1.9, 12, 0]
---rightPants用于persona
```
## 校正模型在空间下对应第三人称手持的位置
先在模型工程内点击 **【文件】** - **【保存项目】** 。
![img](./images/1_0.png)
新建一个人型模型工程,并根据骨骼树状图拉出人型模型格式。
![img](./images/2_0.png)
选择 **【文件】** - **【导入】** 导入前面保存的3D模型项目。
![img](./images/3_0.png)
此时可以看到物品模型的贴图完全丢失。但不用担心它默认援引了人型模型的材质只要它的UV在前面的工程内已经分好这边就无需多管。
![img](./images/4_0.png)
将物品模型基骨骼放入 **【root】** - **【waist】** - **【body】** - **【rightArm】** - **【rightItem】** 骨骼下。并删除除右手方块以外的其他模型方块体。
![img](./images/5_0.png)
继续调整3D物品模型直至调整到一个满意的手持角度。此时删去右手模型方块体。这样一个有效的基础第三人称右手手持模型就做好了。
![img](./images/6_0.png)
## 将3D模型实装
在附加包的自定义资源包内新建attachables文件夹新建一个JSON文件。
![img](./images/7_0.png)
- 渲染控制器:默认可填 **"controller.render.item_default"** ,这是原版提供的一个物品渲染控制器。
- 材质:填写 **"controller.render.item_default"** 后,必须新增 **"default"** 和 **"enchanted"** 键,其中前者对应物品模型默认的材质,后者对应附魔时物品携带的材质。 **"default"** 无特殊情况默认填写 **"entity_alphatest"** "enchanted"默认填写 **"entity_alphatest_glint"** 。
- 贴图纹理:填写 **"controller.render.item_default"** 后,必须 **"default"** 和 **"enchanted"** 键, 其中前者对应自定义物品模型贴图,后者对应物品附魔时的附魔效果贴图(一般默认填写 **""textures/misc/enchanted_item_glint"** )。
- 动画附着物与实体一样可以添加动画和动画控制器也可以添加粒子但目前粒子默认会以实体脚底坐标发射粒子暂时不能在粒子挂点locator上发射。
- 几何体附着物的模型以自定义3D模型的geometry标识符为准。
- 物品标识符:与行为包的自定义物品标识符一致即可。在这里预先填写一个自定义物品标识符 **"design:custom_golden_sword"** ,稍后将用一个自定义物品行为与之呼应。
```json
{
"format_version":"1.10.0",
"minecraft:attachable":{
"description":{
"identifier":"design:custom_golden_sword",
"materials":{
"default":"entity_alphatest",
"enchanted":"entity_alphatest_glint"
},
"textures":{
"default":"textures/entity/custom_golden_sword",
"enchanted":"textures/misc/enchanted_item_glint"
},
"geometry":{
"default":"geometry.custom_golden_sword"
},
"render_controllers":[
"controller.render.item_default"
]
}
}
}
```
接着在附加包的自定义行为包里创建netease_items_beh文件夹并创建子文件custom_golden_sword.json。有关更多自定义物品行为请查看此链接[自定义武器及工具](../2-自定义武器及工具.md)
```json
{
"format_version":"1.10",
"minecraft:item":{
"description":{
"identifier":"design:custom_golden_sword",
"custom_item_type":"weapon",
"category":"Equipment"
},
"components":{
"minecraft:max_damage":700,
"minecraft:max_stack_size":1,
"netease:weapon":{
"type":"sword",
"level":0,
"attack_damage":7,
"enchantment":10
}
}
}
}
```
我们还可以继续在资源包内的netease_items_res文件夹为自定义物品添上2D的物品图标。有关更多自定义物品的基础内容请查看此链接[自定义基础物品](../1-自定义基础物品.md)
```json
{
"format_version":"1.10",
"minecraft:item":{
"description":{
"identifier":"design:custom_golden_sword",
"category":"Equipment"
},
"components":{
"minecraft:icon":"design:custom_golden_sword",
"minecraft:render_offsets":"tools"
}
}
}
```
现在你就可以在游戏加载附加包完成后使用这个自定义3D物品了
![img](./images/8_0.png)
可以使用快速格式化Json等在线工具定位到可能在撰写过程中出现的错误语法或结构。