同步官网文档8m_25d

This commit is contained in:
kwiilh
2025-08-25 18:36:29 +08:00
parent 4dc0ecf18d
commit 9e8855eeb4
5089 changed files with 8798 additions and 4799 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

View File

@@ -0,0 +1,72 @@
---
front:
hard: 入门
time: 15分钟
---
# 认识自定义生物
#### 作者:境界
#### 什么是自定义生物
自定义生物功能为开发者提供了全新的思路来丰富我的世界基岩版的生物种类。在过去修改生物AI行为和形象对于MC新手开发者是极其复杂的事情。它不仅需要开发者对编程语言有较高的掌握和了解可能还会对一些编程算法知识有额外要求。现在开发者只需要学会掌握一种文本编辑器对于JSON语言有一定的了解便可以与美术配合、甚至是靠单人来创造一个新的生物。
### Add-on对自定义生物的功能分配
#### 资源包
在我的世界基岩版中,资源包负责在游戏里渲染生物,同时会根据生物行为的改变而产生相应的视觉效果的反馈。
#### 行为包
行为包则控制生物在游戏里表现的行为,同时会提醒资源包在合适的契机配合播放什么样的动画和特效等。
#### 如何在资源包中定义自定义生物
资源包运行在客户端中是游戏渲染生物材质、动画、模型等的入口。以下将材质包主目录简写为RP。
自定义生物的定义文件会放置在RP/entity文件夹中。
![](./images/1_1.png)
自定义生物的动画文件会放置在RP/animations文件夹中。
![](./images/1_2.png)
自定义生物的模型文件会放置在RP/models/entity文件夹中。
![](./images/1_3.png)
自定义生物的渲染控制器文件会放置在RP/render_controllers文件夹中。
![](./images/1_4.png)
自定义生物的动画控制器文件会放置在RP/animation_controllers文件夹中。
![](./images/1_5.png)
自定义生物的音效文件会放置在RP/sounds文件夹中。
![](./images/1_6.png)

View File

@@ -0,0 +1,133 @@
---
front:
hard: 进阶
time: 15分钟
---
# 生物定义文件
#### 作者:境界
生物资源定义是在客户端中完成的在这一类文件里开发者可以定义生物的纹理、动画、模型、音效、粒子的短名称在有需要的时候还能控制动画的播放时序。这种类型的文件称为生物定义文件它位于RP/entity中格式后缀为.json
```
{
"format_version":"1.10.0",
"minecraft:client_entity":{
"description":{
"identifier":"minecraft:pig",
"materials":{
"default":"pig"
},
"textures":{
"default":"textures/entity/pig/pig",
"saddled":"textures/entity/pig/pig_saddle"
},
"geometry":{
"default":"geometry.pig"
},
"animations":{
"setup":"animation.pig.setup.v1.0",
"walk":"animation.quadruped.walk",
"look_at_target":"animation.common.look_at_target",
"baby_transform":"animation.pig.baby_transform"
},
"scripts":{
"animate":[
"setup",
{
"walk":"query.modified_move_speed"
},
"look_at_target",
{
"baby_transform":"query.is_baby"
}
]
},
"render_controllers":[
"controller.render.pig"
],
"spawn_egg":{
"texture":"spawn_egg",
"texture_index":2
}
}
}
}
```
#### format_version
format_version是指代定义内容的版本号目前有1.8.0和1.10.0两个选择。1.8.0和1.10.0是自定义生物功能实现的两个重大改变版本在基岩版1.8.0首次实装了自定义生物的功能而在1.10.0的版本里基岩版再次重新整理了自定义生物的写法格式。一般情况下使用最新的1.10.0的格式,是现在自定义生物的通用规范。
#### identifier
identifier意为生物的标识符。它由命名空间和名称组成。在游戏中使用/summon召唤实体指令时以minecraft:为开头的原版生物可以直接用它们的名称作为实体召唤的对象。而自定义生物就需要在名字前再添加一个命名空间可以帮助游戏区分例如两个组件都加入了一种名为duck的鸭子生物区分它们来自哪个组件就是命名空间的工作。
#### material
material意为材质是控制实体的呈现方式。游戏中的一些生物带有发光、透明的纹理部分需要指定贴图纹理的材质才能正常生效。
#### texture
texture意为贴图纹理它控制实体的纹理。例如木头的木纹理鸡身上的羽毛等。
#### geometry
geometry意为模型几何体。它控制实体长什么样子。
#### animations
animations意为动画这里会放置一系列的动画资源和控制动画播放时机的动画控制器。
#### scripts/animate
scripts/animate意为播放根动画。动画或动画控制器会放置在这里。
#### render_controller
render_controller意为渲染控制器。它是一种由开发者定义生物该如何渲染的方法。通过渲染控制器可以设置生物的几何体、材质、贴图、和部位隐藏显示等。注意这里的几何体、材质、贴图等词代表渲染生物需要哪些关键信息。如原版猪需要展示两种形态根据放鞍或者不放鞍的状态显示带有鞍或者不带鞍的贴图则可以在渲染控制器中进行切换并由开发者定义入口再由生物定义文件中指向完整的资源路径。
#### particle_effects
particle_effects意为粒子效果。这里会放置一系列需要用到的粒子资源开发者可以使用原版粒子亦或是自定义粒子。
#### sound_effects
sound_effects意为音效效果。这里会放置一系列需要用到的音效资源开发者可以使用原版音效亦或是自定义音效。
#### spawn_egg
spawn_egg意为生物蛋是我的世界召唤生物的一种方式。开发者可以定义生物蛋引用的贴图资源。
#### enable_attachable
enable_attachable意为显示身上穿戴物。在玩家、部分凋零生物身上都有这个属性。

View File

@@ -0,0 +1,81 @@
---
front:
hard: 进阶
time: 15分钟
---
# 动画格式
#### 作者:境界
动画格式是指由基岩版团队为生物实体开发的数据结构是写入JSON文件并以JSON语法呈现的。若开发者是使用Blockbench这样的软件制作的美术资源是可以不用特地了解这些结构的。本章教程更多是为同时兼具美术和开发的个人开发者进行一些知识上的梳理和归纳展示图中可能对一些非关键信息进行了折叠。
#### format_version
format_version是指代定义动画文件的版本号目前只有1.8.0这一格式版本号。
#### Animation.
每个动画资源都必须以animation.为固定前缀。后面的名称可以以生物名称加动画名称的 组合。
#### loop
loop意为动画播放的循环格式。如果只播放一次则loop属性可以不填若循环播放loop值为true。若动画结束后停留在最后一帧值为"hold_on_last_frame"。
#### animation_length
animation_length意为动画时长。
#### bones
bones意为每个骨骼动画信息的集合。在里面保存着所有生物骨骼的位移信息、旋转信息、缩放信息。其中里面的每个属性键都对应着生物几何体的骨骼名称。对应的值内共包含rotation旋转、position位置、scale缩放三种动画形式每个形式内再包含着相应的动画信息。
```
{
"format_version": "1.8.0",
"animations": {
"animation.fallout_cow.dying": {
"animation_length": 0.52,
"bones": {
"body": {
"rotation": {
"0.0": [0, 0, 0],
"0.52": [0, 0, -5]
},
"position": {
"0.0": [0, 0, 0],
"0.52": [-2, -11, 0]
}
}
}
}
}
}
```
如上面代码所示:
"0.0"->“0.52”这个时间段body骨骼绕Z轴旋转-5角度位置以骨骼位置向X轴左边偏移2个单位向Y轴向下偏移11个单位同时最后再放大1.5倍。
当前中国版的动画效果都是线性动画效果,即动画的表现形式为匀速。曲线变化动画效果目前还在实验玩法当中,开发者可以在单人模式上看到效果,但无法将组件用于联机,请等待基岩版团队后续开发计划。

View File

@@ -0,0 +1,92 @@
---
front:
hard: 进阶
time: 15分钟
---
# 渲染控制器
#### 作者:境界
渲染控制器帮助开发者控制生物如何渲染在游戏世界中的表现。它与动画控制器可以被视为自定义生物最难的两个部分。原版生物中不是所有生物都只有单一表现。例如村民战争更新后村民根据群系拥有不同皮肤热带鱼拥有数千种组合狼在生气时会红眼等这些都是由渲染控制器所控制同时又以JSON结构存放在游戏本地文件当中。除了阅读教程之外原版文件同样是天然而又深度的教材希望开发者能在学习过程中对于原版文件进行额外的知识补充。
```
{
"format_version":"1.8.0",
"render_controllers":{
"controller.render.default":{
"geometry":"Geometry.default",
"materials":[
{
"*":"Material.default"
}
],
"textures":[
"Texture.default"
],
"overlay_color":{
"r":0,
"g":0,
"b":0,
"a":0
},
"on_fire_color":{
"r":0,
"g":0,
"b":0,
"a":0
},
"is_hurt_color":{
"r":0,
"g":0,
"b":0,
"a":0
}
}
}
}
```
#### format_version
format_version是指代定义渲染控制器文件的版本号目前只有1.8.0这一格式版本号。
#### controller.render.
每个控制器都必须以controller.render.为固定前缀。后面的名称可以以生物名称作区隔。
#### material
material意为材质。同样值写为"Material.材质键"其中材质键为英文字符会对应生物定义文件中material对象下的键它的值则会引向材质资源。
#### texture
texture意为贴图纹理。同样值写为"texture.贴图键",其中贴图键盘为英文字符,会对应生物定义文件中,贴图对象下的键,它的值则会引向贴图纹理资源。
#### overlay_color
overlay_color意为叠加颜色。类似于图像处理软件的颜色叠加模式其中r代表红色g代表绿色b代表蓝色a代表透明程度。RGB是色彩中的三原色。在控制器中值是由颜色分量除以255得出的。例如RGB(255,0,0)表示红色,则在上述颜色值内填上"r": 1.0,"g": 0.0,"b": 0.0,"a": 1.0。
#### on_fire_color
on_fire_color意为生物实体着火时的颜色。在MC中默认为红色若不自定义此项则会继承原版生物着火的颜色自定义形式同overlay_color。
#### is_hurt_color
is_hurt_color意为生物实体受伤时的颜色。在MC中默认为红色若不自定义此项则会继承原版生物受伤的颜色自定义形式同overlay_color。

View File

@@ -0,0 +1,100 @@
---
front:
hard: 进阶
time: 20分钟
---
# 动画控制器
#### 作者:境界
动画控制器掌管生物播放动画的时机。一个生物实体可以同时加载多个动画资源,也可以同时加载多个动画控制器。动画控制器实际上是一个状态控制机,它在资源包上会用来播放动画,它在行为包上用来执行指令,或者指令“动画”。
浅粗地了解状态控制机,它实际上是一个特殊的逻辑管理模式,每个状态都有两个属性:
1)在当前状态下做什么;
2)如何转移到其他状态;
状态机之所以有用,是因为它们使开发者能够自然地将动画分解成逻辑流程,每个状态都处理自己的动画和逻辑。
![](./images/5_1.jpg)
例如,假设开发者要为自定义生物松鼠设置一个休息-移动动画,则它包含两种状态:
休息状态和移动状态,可视化流程图如上方所示。
```
{
"format_version":"1.10.0",
"animation_controllers":{
"controller.animation.squirrel.general":{
"initial_state":"default",
"states":{
"default":{
"blend_transition":0.1,
"blend_via_shortest_path":true,
"animations":[
"idle"
],
"transitions":[
{
"move":"query.is_moving"
}
]
},
"move":{
"animations":[
"move"
],
"transitions":[
{
"default":"!query.is_moving"
}
]
}
}
}
}
}
```
#### format_version
format_version是指代定义动画控制器文件的版本号目前有1.8.0、1.10.0这两个格式版本号。1.10.0的版本里基岩版再次重新整理了自定义生物的动画控制器写法格式。一般情况下使用最新的1.10.0的格式,是现在自定义生物的通用规范。
#### controller.animation.
每个控制器都必须以controller.animation.为固定前缀。后面的名称可以以生物名称作区隔。
#### initial_state
initial_state是指动画控制器的初始状态默认不写时默认值为default。
#### states
states是状态的集合在里面会包含动画集合切换状态集合。其中动画集合可以同时放置多个动画它们会在切换到该状态时马上播放。如松鼠摇头待机动画和松鼠摇尾巴待机动画。切换状态集合内会有存放其他状态的对象数据如上图中切换到移动状态时必须满足生物移动的条件。
最后是两个特殊属性blend_transition和blend_via_shortest_path。
blend_transition意为让动画状态切换更加顺滑合理分配该值可能会做出更加顺畅的动画切换效果它的值取0.0~1.0之间。
#### blend_via_shortest_path
blend_via_shortest_path意为是马上切换过渡到下个状态根据开发者需求而定。

View File

@@ -0,0 +1,135 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/6_1.6892d54c.jpg
hard: 进阶
time: 20分钟
---
# 绑定动画粒子和动画控制粒子
#### 作者:境界
粒子可以做出非常出彩的效果,让生物的视觉体验提高几个层次。在游戏中,墨鱼喷墨和烈焰人蓄力发射烈焰弹时的火焰都归于粒子效果的范畴。开发者可以在生物定义文件中引用粒子,再通过动画和动画控制器两种方式来播放粒子。粒子还可以绑定在生物的几何体模型上,根据生物的骨骼位置、旋转角度进行相对计算,是更加进阶的粒子使用。在本章中会教开发者如何让粒子跟随生物实体,实现一个简单的效果。
![](./images/6_01.png)
原版的粒子可以在RP/particles文件夹中找到以中国版当前版本1.211.16.10一共有113个预定义好的原版粒子开发者可以通过研读其中的结构设定来实现自己的新粒子。
![](./images/6_1.jpg)
1打开Blockbench导入原版猪的模型和贴图。
2点击动画模式新建一个动画。
![](./images/6_2.jpg)
3点击动画动画效果打开动画特效面板。
![](./images/6_3.jpg)
4在效果栏列插入帧同时在左侧关键帧文字上方选择导入文件选择所需的粒子。同时填入在生物定义文件预先索引好的粒子短名称。
5拖动鼠标即可预览粒子。
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"particle_effects":{
"0.0":{
"effect":"smoke"
}
}
}
}
}
```
6保存好动画文件可以看到在动画格式中新增了一个particle_effects对象内容是时间差和它对应的值值内包含着粒子效果的短名称将新建的动画在生物定义文件中定义好后若动画配置正确游戏内粒子就会正常播放了。
7在Blockbench当中一帧内只能添加一种粒子效果。若需要同时播放好几种粒子效果则需要将粒子效果对象改为粒子效果数组再手动填入每一个粒子对象。
如:
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"particle_effects":{
"0.0":[
{
"effect":"smoke"
},
{
"effect":"flame"
}
]
}
}
}
}
```
```
{
"format_version":"1.10.0",
"animation_controllers":{
"controller.animation.blaze.flame":{
"initial_state":"default",
"states":{
"default":{
"transitions":[
{
"flaming":"query.is_charged"
}
]
},
"flaming":{
"particle_effects":[
{
"effect":"charged_flames"
}
],
"transitions":[
{
"default":"!query.is_charged"
}
]
}
}
},
"controller.animation.blaze.move":{
"initial_state":"default",
"states":{
"default":{
"animations":[
"move",
"look_at_target"
]
}
}
}
}
}
```
与绑定动画粒子相比,动画控制器粒子可能更为简单。在每个状态下新建一个粒子效果集合,即"particle_effects",它同样可以同时添加多种粒子效果。
与绑定动画粒子不同的是,当动画控制器切换到带有粒子效果的状态时,粒子会在第一时间播放,想要延迟粒子的播放则只能手动修改粒子的发射时间。而动画粒子可以根据动画达到一定时间才会播放一次粒子效果。

View File

@@ -0,0 +1,127 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/7_2.d721173b.jpg
hard: 进阶
time: 20分钟
---
# 绑定动画音效及动画控制器音效
#### 作者:境界
音效是可以提升游戏沉浸感、真实感的一种方法。在游戏里,玩家除了能够听到背景音乐、环境音乐,每种生物也都有自己的专属声音。例如羊吃草,蜜蜂嗡嗡嗡。一种生物如果在每个行为表现上都有自己的音效,会让玩家觉得生物更加生动。因此,本章将会教给开发者如何通过动画和动画控制器来给生物添加上音效。
![](./images/7_01.png)
原版的音效可以在RP/sounds中找到由于MC原版音效使用的是商业音效引擎FMOD正常情况下是无法试听音效。但开发者可以在同目录下的sound_definitions.json文件中找到音效的资源名称和资源路径。通过一定的比较提取出适合的音效作为练习绑定生物音效的素材。
![](./images/7_1.jpg)
1打开Blockbench导入原版猪的模型和贴图。
2点击动画模式新建一个动画。
3点击动画动画效果打开动画特效面板。
4在效果栏列插入帧同时在左侧关键帧文字下方效果输入在生物定义文件中定义好的音效名称。
![](./images/7_2.jpg)
5进入游戏测试音效播放情况。
6保存好动画文件可以看到在动画格式中新增了一个sound_effects对象内容是时间差和它对应的值值内包含着音效效果的名称将新建的动画在生物定义文件中定义好后若动画配置正确游戏内音效就会正常播放了。
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"sound_effects":{
"0.0":{
"effect": “smoke”
}
}
}
}
}
```
7在Blockbench当中一帧内只能添加一种音效效果。若需要同时播放好几种音效效果则需要将音效效果对象改为音效效果数组再手动填入每一个音效对象。
如:
```
{
"format_version":"1.8.0",
"animations":{
"animation.pig.particle":{
"sound_effects":{
"0.0":[
{
"effect":"jiliguala"
},
{
"effect":"yiyiyaya"
}
]
}
}
}
}
```
与绑定动画音效相比,动画控制器音效可能更为简单。在每个状态下新建一个音效效果集合,即"sound_effects",它同样可以同时添加多种音效效果。
```
{
"format_version":"1.10.0",
"animation_controllers":{
"controller.animation.blaze.flame":{
"initial_state":"default",
"states":{
"default":{
"transitions":[
{
"flaming":"query.is_charged"
}
]
},
"flaming":{
"sound_effects":[
{
"effect":"balabala"
}
],
"particle_effects":[
{
"effect":"charged_flames"
}
],
"transitions":[
{
"default":"!query.is_charged"
}
]
}
}
}
}
}
```
与绑定动画音效不同的是,当动画控制器切换到带有音效效果的状态时,音效会在第一时间播放,并且播放结束后就不会重新播放。若音效绑定在动画内并且动画被设置为循环开启,则音效会在指定的时间间隔不断重复播放,直到动画结束为止。

View File

@@ -0,0 +1,23 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/8_1.17f29d6f.jpg
hard: 入门
time: 10分钟
---
# 继承与复用思维
#### 作者:境界
新手开发者在制作自定义生物时,往往带有很多奇妙的点子,但在实际操作过程中,难免遇到暂时无法攻克的问题。正所谓“千里之行始于足下”,学会使用原版生物资源来制作一些带有额外行为、功能、特效的生物,往往是一个能够不断积累经验,又不容易遇到挫败感的方法。
当制作一个新的生物时,一个可靠的逻辑链参考可如以下所示:
![](./images/8_1.jpg)
在制作新的自定义生物时,最好的学习资料来自原版的资源包。最好的仿照生物,也同样来自于原版世界中的原版生物。学习是一个不断积累,不断解决困难的过程。只要锲而不舍,则金石可镂。

View File

@@ -0,0 +1,15 @@
---
front:
hard: 入门
time: 5分钟
---
# 制作一只小水鸭
#### 作者:境界
水鸭是一个很经典的例子。鸭子和鸡的形态特征十分相似,但它又有独立的行为,如浮在水面上而又移动速度快等特点。根据继承与复用思维,这是一个很好的针对初级开发者适用的生物类型题材。因此本章内容教程会教给开发者如何自定义一个新生物:水鸭。

View File

@@ -0,0 +1,63 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/10_2.aa637b4c.jpg
hard: 进阶
time: 20分钟
---
# 利用Blockbench修整鸡的模型
#### 作者:境界
![](./images/10_1.jpg)
![](./images/10_2.jpg)
在Blockbench中导入鸡的模型从中可以看到它一共被分为6个骨骼。
1body身体
2head头部
3leg0右脚
4leg1左脚
5wing0右翼
6wing1左翼
这样的骨骼分组十分符合我们对新生物水鸭的需求。对照现实中的绿头水鸭,只需提取鸭头、鸭嘴、羽毛特征,进行个人风格化的修整,即可制作完一只水鸭模型。
![](./images/10_3.jpg)
1打开blockbench选择基岩版模型。
2点击文件选择打开模型找到鸡的模型文件通常在客户端文件中的data/resource_packs/vanilla/models/entity/chicken.geo.json中选择geometry.chicken再点击导入。
3点击body骨骼按下快捷键R用鼠标向X轴正旋转90度或是在元素面板中的旋转单位里在X轴输入90矫正模型。
4拉高鸡的脖子由于绿头鸭的一大特征是脖子很长我们将脖子高度由6拉到9。同时鸭子没有鸡的红脖子因此去掉红色的方块随后移动beak骨骼即喙到靠近升高后的眼睛位置。
5鸭子有比鸡更长的尾巴因此我们在body骨骼里放入两个新的方块来模拟尾巴。将大尾巴移动到x为-3y为12z为-2的位置将方块放大至长度为6高度为2宽度为5。将第二个方块作为小尾巴位置放在x为-2y为12z为0的位置。将尺寸拉至4格长1格高4格宽。
![](./images/10_4.jpg)
![](./images/11_1.jpg)
6最后我们的水头鸭会长成这样不用担心现在看起来贴图纹理很怪异的原因是因为原来贴图上的像素点无法对应新增的方块面积而变成了透明区域。再下一章我们会带大家进行贴图的绘制。

View File

@@ -0,0 +1,53 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/11_5.2f677828.jpg
hard: 进阶
time: 25分钟
---
# 利用BlockBench为鸭画上贴图
#### 作者:境界
![](./images/11_1.jpg)
修改完鸡的模型后我们在右上角将blockbench列为画板模式指针变成笔刷点击方块区域即可上色。
![](./images/11_2.jpg)
1首先删掉原来的贴图点击创建贴图将贴图名称改为green_duck勾选模板接着一直点击确定。
![](./images/11_3.jpg)
![](./images/11_4.jpg)
2首先调整喙的颜色水鸭的喙更加鲜艳因此可以选择更鲜艳饱和度高的黄色阴影选择稍微浅的土黄色。
![](./images/11_5.jpg)
2绿水鸭最显眼的是它的绿冠头用笔刷给它画上深绿色。脖子上还有个白色红领巾再下一层给它刷上白色。
4接着将胸口后背和大尾巴刷成棕色小尾巴和其他身体画成白色。
5让脚方块的前面上面、侧面和一小部分的背面变透明使用画板模式的橡皮擦即可。其他部分画成黄色。
6加上一些阴影一只继承了鸡骨骼的水鸭模型就做好了。
![](./images/11_6.jpg)
7最后一步选择文件->导出,选择导出基岩版模型,之后在自定义水鸭时还会用到它。

View File

@@ -0,0 +1,75 @@
---
front:
hard: 进阶
time: 20分钟
---
# 继承鸡的动画
#### 作者:境界
将green_head_duck.geo.json放入材质包中models文件夹的entity文件夹内。
将green_head_duck.png放入材质包中textures文件夹内的entity文件夹里。
在材质包中的entity文件夹里新建一个green_head_duck.entity.json文件。
```
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "design:green_head_duck",
"render_controllers": [
"controller.render.default"
],
"textures": {
"default": "textures/entity/green_head_duck"
},
"geometry": {
"default": "geometry.green_head_duck"
},
"materials": {
"default": "entity_alphatest"
},
"animations": {
"move": "animation.chicken.move",
"look_at_target": "animation.common.look_at_target"
},
"scripts": {
"animate": [
{ "move": "query.modified_move_speed" },
"look_at_target"
]
},
"spawn_egg": {
"base_color": "#256143",
"overlay_color": "#dd9238"
}
}
}
}
```
1首先我们将名称域定义为design:green_head_duck。
2接着我们使用原版默认的基础渲染控制器"controller.render.default",它会控制生物渲染成一份由一个模型、一张贴图、一份材质组合的生物形象。
3接着在textures中我们将贴图资源路径指向存放在textures/entity里的green_head_duck贴图请注意在这里你不需要写出贴图文件后缀名。
4在geometry中我们将模型资源指向前面做好的几何体模型上。在项目一开始时我们导出的模型是由鸡模型魔改而成因此打开水鸭模型时模型的名称域依旧是geometry.chicken为了避免资源冲突需要提前将这里改为geometry.green_head_duck。
5在materials中将材质设置为entity_alphatest它将允许生物使用带有透明通道的贴图。
6在animations下加载鸡的移动动画和注视动画。
7在scripts/animate下将动画加载上去。
8在spawn_egg里我们新增两个属性键值一个是"base_color",值为"#256143"这是代表着一种深绿色的颜色色量而值代表蛋的基础颜色。新增一个“overlay_color“值为"#dd9238",而值代表蛋的斑点颜色。

View File

@@ -0,0 +1,81 @@
---
front:
hard: 进阶
time: 15分钟
---
# 加一点点鸭子音效
#### 作者:境界
音效位于RP/sounds文件夹中因此自定义的音效同样需要放在这里开发者可以用文件夹进行区隔。自定义的音效文件使用的是.ogg和.wav两种格式。在追求质量下.wav比.ogg的音质更好但.ogg比.wav更节省空间由开发者的自身考量去决定使用什么样的格式。
```
{
"mob.green_head_duck.ambient": {
"category": "neutral",
"sounds": [
{
"name": "sounds/mob/green_head_duck/ambient",
"volume": 0.7
}
]
}
}
```
开发者需要在sounds文件夹下放入一个sound_definitions.json文件。我们定义了一个资源路径"mob.green_head_duck.ambient"我们设置了音效种类category为neutral自然在1.16.200以前设定音效种类对于音效是否正常播放关系不大。在1.16.200版本后,开发者可以通过设置里根据音效种类调整对应的音量大小。
sounds数组里会存放每个音效的资源地址和音量大小、播放距离等一般不设置音量大小(volume)的话,默认是音效的正常音量。
```
{
"entity_sounds": {
"entities": {
"design:green_head_duck": {
"volume": 1.0,
"pitch": [0.8, 1.2],
"events": {
"ambient": "mob.green_head_duck.ambient"
}
}
}
}
}
```
回到材质包主目录下的sounds.json文件这个文件同样需要手动创建。进入文件后定义结构格式为
```
{
"entity_sounds": {
"entities": {}
}
}
```
其中entities内放入对应的生物名称域我们的水鸭名称域为design:green_head_duck因此对象名称就以"design:green_head_duck"为准,它里面的属性包含了音量,音调,和音效播放事件。在修改了音频、音效本身的音量和音调等效果后,还可以在这里重新修订一次。事件内包含着许多生物在不同状态下会播放的音效。
常用的参数选项一般有以下几个:
ambient自然音效即待机时播放的音效。
hurt受伤音效即受伤时播放的音效。
death死亡音效死亡时播放的音效。
step行走音效行走时播放的音效。
attack攻击音效攻击时的音效。
shoot射击音效设计时播放的音效。

View File

@@ -0,0 +1,144 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/14_1.199826f4.jpg
hard: 进阶
time: 25分钟
---
# 让水鸭活动起来
#### 作者:境界
在材质包完成了水鸭的一切工作后,开发者回到行为包上。在这里,我们可以使用原版的鸡行为去掉一部分多余的内容,增加一些新的行为,来模拟出水鸭的行为状态。
```
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "design:green_head_duck",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false,
"runtime_identifier": "design:green_head_duck"
}
},
"component_groups": {
},
}
"components": {
"minecraft:type_family": {
"family": [ "duck", "mob" ]
},
"minecraft:breathable": {
"total_supply": 15,
"suffocate_time": 0
},
"minecraft:collision_box": {
"width": 0.6,
"height": 0.8
},
"minecraft:nameable": {
},
"minecraft:health": {
"value": 4,
"max": 4
},
"minecraft:hurt_on_condition": {
"damage_conditions": [
{
"filters": { "test": "in_lava", "subject": "self", "operator": "==", "value": true },
"cause": "lava",
"damage_per_tick": 4
}
]
},
"minecraft:movement": {
"value": 0.25
},
"minecraft:damage_sensor": {
"triggers": {
"cause": "fall",
"deals_damage": false
}
},
"minecraft:behavior.rise_to_liquid_level": {
"priority": 0,
"liquid_y_offset": -0.5,
"rise_delta": 0.01,
"sink_delta": 0.01
},
"minecraft:leashable": {
"soft_distance": 4.0,
"hard_distance": 6.0,
"max_distance": 10.0
},
"minecraft:balloonable": {
"mass": 0.5
},
"minecraft:navigation.walk": {
"can_path_over_water": true,
"can_sink": false,
"avoid_damage_blocks": true
},
"minecraft:movement.basic": {
},
"minecraft:jump.static": {
},
"minecraft:can_climb": {
},
"minecraft:despawn": {
"despawn_from_distance": {}
},
"minecraft:behavior.panic": {
"priority": 1,
"speed_multiplier": 1.5
},
"minecraft:behavior.tempt": {
"priority": 4,
"speed_multiplier": 1.0,
"items": [
"wheat_seeds",
"beetroot_seeds",
"melon_seeds",
"pumpkin_seeds"
]
},
"minecraft:behavior.random_stroll": {
"priority": 6,
"speed_multiplier": 1.0
},
"minecraft:behavior.look_at_player": {
"priority": 7,
"look_distance": 6.0,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 8
},
"minecraft:physics": {
},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
}
},
"events": {
}
}
}
```
1将format_version格式设置为最新的1.16.0水鸭作为一个带有生物蛋的生物我们将is_summonable可用指令生成的设置为trueis_spawnable可用生物蛋设置为trueis_experimental是否是实验玩法打开才能看到的生物设置为false。同时将runtime_identifier指向自己。
2行为组内的组合都清空同时在原本鸡的行为上加入”minecraft:behavior.rise_to_liquid_level“行为这是一个来自炽足兽的新行为。可以让生物在水面上下起伏就像水上的鸭子一样。
3其中行为内部属性里priority设置为0即最高级优先使用的行为。liquid_y_offset设置为-0.5。rise_delta是上升增量sink_delta是下降增量来模拟鸭子的上下起伏。这里都设置为0.01。这样一个可爱的绿头鸭就做好了。
![](./images/14_1.jpg)

View File

@@ -0,0 +1,134 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/15_1.379b8dfc.jpg
hard: 进阶
time: 15分钟
---
# 练习1水鸭浮在水上时的泡泡粒子
#### 作者:境界
```
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "design:green_head_duck",
"render_controllers": [
"controller.render.default"
],
"textures": {
"default": "textures/entity/green_head_duck"
},
"geometry": {
"default": "geometry.green_head_duck"
},
"materials": {
"default": "entity_alphatest"
},
"animations": {
"move": "animation.chicken.move",
"look_at_target": "animation.common.look_at_target"
},
"scripts": {
"animate": [
{ "move": "query.modified_move_speed" },
"look_at_target"
]
},
"spawn_egg": {
"base_color": "#256143",
"overlay_color": "#dd9238"
}
}
}
}
```
使用前面的知识,我们知道今天要播放粒子,首先要把粒子资源加载在生物定义文件中。
1在description内新增particle_effects引用原版粒子"minecraft:basic_bubble_particle_manual"同时将粒子短名称写为bubble。
2在动画控制器文件夹内新增一个控制绿头水鸭播放粒子的动画控制器由于我们希望水鸭不停播放这个粒子因此只需定义一个状态即可。
3将动画控制器加载到生物定义文件的动画资源键中接着在scripts/animate中的根动画加载这个动画控制器。
4该粒子的设定下释放的特效只会在水中有效因此在游戏内可以看到只有绿头水鸭在水里才会冒出泡泡粒子。
```
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.green_head_duck.particle": {
"initial_state": "default",
"states": {
"default": {
"particle_effects": [
{
"effect": "bubble"
}
]
}
}
}
}
}
```
```
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "design:green_head_duck",
"render_controllers": [
"controller.render.default"
],
"textures": {
"default": "textures/entity/green_head_duck"
},
"geometry": {
"default": "geometry.green_head_duck"
},
"materials": {
"default": "entity_alphatest"
},
"particle_effects": {
"bubble": "minecraft:basic_bubble_particle_manual"
},
"animations": {
"move": "animation.chicken.move",
"look_at_target": "animation.common.look_at_target",
"particle": "controller.animation.green_head_duck.particle"
},
"scripts": {
"animate": [
{ "move": "query.modified_move_speed" },
"particle",
"look_at_target"
]
},
"spawn_egg": {
"base_color": "#256143",
"overlay_color": "#dd9238"
}
}
}
}
```
现在,一个在水中移动会不停冒水泡泡的绿头水鸭就做好了。
![](./images/15_1.jpg)

View File

@@ -0,0 +1,171 @@
---
front:
hard: 进阶
time: 20分钟
---
# 练习2会攻击侵犯领地的凶狠水鸭
#### 作者:境界
凶狠水鸭示例包下载:下载[示例包](https://g79.gdl.netease.com/guidedemo-case7v2.zip)。
```
{
"format_version": "1.16.0",
"minecraft:entity": {
"description": {
"identifier": "design:green_head_duck",
"is_spawnable": true,
"is_summonable": true,
"is_experimental": false,
"runtime_identifier": "design:green_head_duck"
},
"component_groups": {
},
"components": {
"minecraft:breathable": {
"total_supply": 15,
"suffocate_time": 0
},
"minecraft:collision_box": {
"width": 0.6,
"height": 1.0
},
"minecraft:nameable": {
},
"minecraft:health": {
"value": 4,
"max": 4
},
"minecraft:hurt_on_condition": {
"damage_conditions": [
{
"filters": { "test": "in_lava", "subject": "self", "operator": "==", "value": true },
"cause": "lava",
"damage_per_tick": 4
}
]
},
"minecraft:movement": {
"value": 0.25
},
"minecraft:damage_sensor": {
"triggers": {
"cause": "fall",
"deals_damage": false
}
},
"minecraft:behavior.rise_to_liquid_level": {
"priority": 0,
"liquid_y_offset": -0.5,
"rise_delta": 0.01,
"sink_delta": 0.01
},
"minecraft:leashable": {
"soft_distance": 4.0,
"hard_distance": 6.0,
"max_distance": 10.0
},
"minecraft:balloonable": {
"mass": 0.5
},
"minecraft:navigation.walk": {
"can_path_over_water": true,
"can_sink": false,
"avoid_damage_blocks": true
},
"minecraft:movement.basic": {
},
"minecraft:jump.static": {
},
"minecraft:can_climb": {
},
"minecraft:despawn": {
"despawn_from_distance": {}
},
"minecraft:behavior.panic": {
"priority": 1,
"speed_multiplier": 1.5
},
"minecraft:behavior.tempt": {
"priority": 4,
"speed_multiplier": 1.0,
"items": [
"wheat_seeds",
"beetroot_seeds",
"melon_seeds",
"pumpkin_seeds"
]
},
"minecraft:type_family": {
"family": [ "duck", "mob" ]
},
"minecraft:behavior.melee_attack": {
"priority": 3,
"speed_multiplier": 1,
"track_target": false
},
"minecraft:behavior.nearest_attackable_target": {
"priority": 2,
"reselect_targets": true,
"must_see": false,
"entity_types": [
{
"filters": {
"all_of": [
{ "test": "is_family", "subject": "other", "value": "mob" },
{ "test": "is_family", "subject": "other", "operator": "not", "value": "duck"}
]
},
"max_dist": 5
}
]
},
"minecraft:attack": {
"damage": 1
},
"minecraft:behavior.random_stroll": {
"priority": 6,
"speed_multiplier": 1.0
},
"minecraft:behavior.look_at_player": {
"priority": 7,
"look_distance": 6.0,
"probability": 0.02
},
"minecraft:behavior.random_look_around": {
"priority": 8
},
"minecraft:physics": {
},
"minecraft:pushable": {
"is_pushable": true,
"is_pushable_by_piston": true
}
},
"events": {
}
}
}
```
攻击侵犯领地的行为,可以想象成为靠近水鸭多近会引起水鸭的攻击。因此在设置一个生物拥有近战能力的时候,需要用三个行为进行组合:
1minecraft:attack它的damage值可以接受一个数组也可以接受一个整数数值。数组情况下可以让伤害在数组内由大到小取一个随机伤害而一个固定数值则代表的是固定伤害。
2minecraft:behavior.nearest_attackable_target它的entity_types接受一连串的生物目标我们在目标选择器中同时将目标设置为mob但又不是duck即所有带有mob标签却不带有duck标签的生物。max_dist代表在多远距离内会被当作目标must_see意为是否必须看到才会当作目标reselect_targets会在一群目标里不断选择离自己最近的目标。
3minecraft:behavior.melee_attack,它的speed_multiplier接收一个浮点数值即保持进攻状态时速度会给予多少的加成1为100%则保持原速1.5则是150%。track_target接收一个布尔值若设置为true则会不停跟着目标即使走出攻击范围false则会在目标离开攻击范围后停止行为。
特别注意由于minecraft:type_family组件用来标记生物的家族类型原版鸡携带的家族标签为"mob“和"chicken"理论上所有原版的生物都带有这个mob标签我们将水鸭的标签保留了mob标签也是为了允许其他原版生物在处理一些需要判断生物标签的行为如寻找目标的时候能够将水鸭纳入目标范围内更加的贴近原版的生态。除此之外我们将chicken改为duck一个是强调实体携带duck标签另一个是为了在自身寻找目标的行为当中将同为duck标签的实体剔除出目标范围。若保持原来鸡的写法则会变成需要剔除chicken标签的实体那样就会包括了鸡这类生物不符合实际需求。