同步官网文档8m_25d
0
mconline/10-addon教程/第07章:自定义生物/README.md
Normal file
BIN
mconline/10-addon教程/第07章:自定义生物/images/10_1.jpg
Normal file
|
After Width: | Height: | Size: 264 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/10_2.jpg
Normal file
|
After Width: | Height: | Size: 209 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/10_3.jpg
Normal file
|
After Width: | Height: | Size: 246 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/10_4.jpg
Normal file
|
After Width: | Height: | Size: 188 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_1.jpg
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_2.jpg
Normal file
|
After Width: | Height: | Size: 241 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_3.jpg
Normal file
|
After Width: | Height: | Size: 172 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_4.jpg
Normal file
|
After Width: | Height: | Size: 214 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_5.jpg
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/11_6.jpg
Normal file
|
After Width: | Height: | Size: 220 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/14_1.jpg
Normal file
|
After Width: | Height: | Size: 322 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/15_1.jpg
Normal file
|
After Width: | Height: | Size: 280 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_1.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_2.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_3.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_4.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_5.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/1_6.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/5_1.jpg
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/6_01.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/6_1.jpg
Normal file
|
After Width: | Height: | Size: 170 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/6_2.jpg
Normal file
|
After Width: | Height: | Size: 169 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/6_3.jpg
Normal file
|
After Width: | Height: | Size: 174 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/7_01.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/7_1.jpg
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/7_2.jpg
Normal file
|
After Width: | Height: | Size: 164 KiB |
BIN
mconline/10-addon教程/第07章:自定义生物/images/8_1.jpg
Normal file
|
After Width: | Height: | Size: 159 KiB |
72
mconline/10-addon教程/第07章:自定义生物/课程01.认识自定义生物.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
front:
|
||||
hard: 入门
|
||||
time: 15分钟
|
||||
---
|
||||
|
||||
# 认识自定义生物
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
#### 什么是自定义生物
|
||||
|
||||
自定义生物功能为开发者提供了全新的思路来丰富我的世界基岩版的生物种类。在过去,修改生物AI行为和形象,对于MC新手开发者是极其复杂的事情。它不仅需要开发者对编程语言有较高的掌握和了解,可能还会对一些编程算法知识有额外要求。现在,开发者只需要学会掌握一种文本编辑器,对于JSON语言有一定的了解,便可以与美术配合、甚至是靠单人来创造一个新的生物。
|
||||
|
||||
|
||||
|
||||
### Add-on对自定义生物的功能分配
|
||||
|
||||
#### 资源包
|
||||
|
||||
在我的世界基岩版中,资源包负责在游戏里渲染生物,同时会根据生物行为的改变而产生相应的视觉效果的反馈。
|
||||
|
||||
#### 行为包
|
||||
|
||||
行为包则控制生物在游戏里表现的行为,同时会提醒资源包在合适的契机配合播放什么样的动画和特效等。
|
||||
|
||||
|
||||
|
||||
#### 如何在资源包中定义自定义生物
|
||||
|
||||
资源包运行在客户端中,是游戏渲染生物材质、动画、模型等的入口。以下将材质包主目录简写为RP。
|
||||
|
||||
|
||||
|
||||
自定义生物的定义文件,会放置在:RP/entity文件夹中。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
自定义生物的动画文件,会放置在:RP/animations文件夹中。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
自定义生物的模型文件,会放置在:RP/models/entity文件夹中。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
自定义生物的渲染控制器文件,会放置在:RP/render_controllers文件夹中。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
自定义生物的动画控制器文件,会放置在:RP/animation_controllers文件夹中。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
自定义生物的音效文件,会放置在:RP/sounds文件夹中。
|
||||
|
||||

|
||||
|
||||
133
mconline/10-addon教程/第07章:自定义生物/课程02.生物定义文件.md
Normal 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意为显示身上穿戴物。在玩家、部分凋零生物身上都有这个属性。
|
||||
81
mconline/10-addon教程/第07章:自定义生物/课程03.动画格式.md
Normal 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倍。
|
||||
|
||||
|
||||
|
||||
当前中国版的动画效果都是线性动画效果,即动画的表现形式为匀速。曲线变化动画效果目前还在实验玩法当中,开发者可以在单人模式上看到效果,但无法将组件用于联机,请等待基岩版团队后续开发计划。
|
||||
|
||||
92
mconline/10-addon教程/第07章:自定义生物/课程04.渲染控制器.md
Normal 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。
|
||||
100
mconline/10-addon教程/第07章:自定义生物/课程05.动画控制器.md
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
front:
|
||||
hard: 进阶
|
||||
time: 20分钟
|
||||
---
|
||||
|
||||
# 动画控制器
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
动画控制器掌管生物播放动画的时机。一个生物实体可以同时加载多个动画资源,也可以同时加载多个动画控制器。动画控制器实际上是一个状态控制机,它在资源包上会用来播放动画,它在行为包上用来执行指令,或者指令“动画”。
|
||||
|
||||
浅粗地了解状态控制机,它实际上是一个特殊的逻辑管理模式,每个状态都有两个属性:
|
||||
|
||||
1)在当前状态下做什么;
|
||||
|
||||
2)如何转移到其他状态;
|
||||
|
||||
状态机之所以有用,是因为它们使开发者能够自然地将动画分解成逻辑流程,每个状态都处理自己的动画和逻辑。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
例如,假设开发者要为自定义生物松鼠设置一个休息-移动动画,则它包含两种状态:
|
||||
|
||||
休息状态和移动状态,可视化流程图如上方所示。
|
||||
|
||||
```
|
||||
{
|
||||
"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意为是马上切换过渡到下个状态,根据开发者需求而定。
|
||||
135
mconline/10-addon教程/第07章:自定义生物/课程06.绑定动画粒子和动画控制粒子.md
Normal 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分钟
|
||||
---
|
||||
|
||||
# 绑定动画粒子和动画控制粒子
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
粒子可以做出非常出彩的效果,让生物的视觉体验提高几个层次。在游戏中,墨鱼喷墨和烈焰人蓄力发射烈焰弹时的火焰都归于粒子效果的范畴。开发者可以在生物定义文件中引用粒子,再通过动画和动画控制器两种方式来播放粒子。粒子还可以绑定在生物的几何体模型上,根据生物的骨骼位置、旋转角度进行相对计算,是更加进阶的粒子使用。在本章中会教开发者如何让粒子跟随生物实体,实现一个简单的效果。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
原版的粒子可以在RP/particles文件夹中找到,以中国版当前版本1.21(1.16.10)中,一共有113个预定义好的原版粒子,开发者可以通过研读其中的结构设定,来实现自己的新粒子。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
1)打开Blockbench,导入原版猪的模型和贴图。
|
||||
|
||||
2)点击动画模式,新建一个动画。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
3)点击动画,动画效果,打开动画特效面板。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
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",它同样可以同时添加多种粒子效果。
|
||||
|
||||
与绑定动画粒子不同的是,当动画控制器切换到带有粒子效果的状态时,粒子会在第一时间播放,想要延迟粒子的播放则只能手动修改粒子的发射时间。而动画粒子可以根据动画达到一定时间才会播放一次粒子效果。
|
||||
127
mconline/10-addon教程/第07章:自定义生物/课程07.绑定动画音效及动画控制器音效.md
Normal 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分钟
|
||||
---
|
||||
|
||||
# 绑定动画音效及动画控制器音效
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
音效是可以提升游戏沉浸感、真实感的一种方法。在游戏里,玩家除了能够听到背景音乐、环境音乐,每种生物也都有自己的专属声音。例如羊吃草,蜜蜂嗡嗡嗡。一种生物如果在每个行为表现上都有自己的音效,会让玩家觉得生物更加生动。因此,本章将会教给开发者如何通过动画和动画控制器来给生物添加上音效。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
原版的音效可以在RP/sounds中找到,由于MC原版音效使用的是商业音效引擎FMOD,正常情况下是无法试听音效。但开发者可以在同目录下的sound_definitions.json文件中,找到音效的资源名称和资源路径。通过一定的比较,提取出适合的音效作为练习绑定生物音效的素材。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
1)打开Blockbench,导入原版猪的模型和贴图。
|
||||
|
||||
2)点击动画模式,新建一个动画。
|
||||
|
||||
3)点击动画,动画效果,打开动画特效面板。
|
||||
|
||||
4)在效果栏列插入帧,同时在左侧关键帧文字下方效果输入在生物定义文件中定义好的音效名称。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
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"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
与绑定动画音效不同的是,当动画控制器切换到带有音效效果的状态时,音效会在第一时间播放,并且播放结束后就不会重新播放。若音效绑定在动画内并且动画被设置为循环开启,则音效会在指定的时间间隔不断重复播放,直到动画结束为止。
|
||||
23
mconline/10-addon教程/第07章:自定义生物/课程08.继承与复用思维.md
Normal 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分钟
|
||||
---
|
||||
|
||||
# 继承与复用思维
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
新手开发者在制作自定义生物时,往往带有很多奇妙的点子,但在实际操作过程中,难免遇到暂时无法攻克的问题。正所谓“千里之行始于足下”,学会使用原版生物资源来制作一些带有额外行为、功能、特效的生物,往往是一个能够不断积累经验,又不容易遇到挫败感的方法。
|
||||
|
||||
当制作一个新的生物时,一个可靠的逻辑链参考可如以下所示:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
在制作新的自定义生物时,最好的学习资料来自原版的资源包。最好的仿照生物,也同样来自于原版世界中的原版生物。学习是一个不断积累,不断解决困难的过程。只要锲而不舍,则金石可镂。
|
||||
15
mconline/10-addon教程/第07章:自定义生物/课程09.制作一只小水鸭.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
front:
|
||||
hard: 入门
|
||||
time: 5分钟
|
||||
---
|
||||
|
||||
# 制作一只小水鸭
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||
水鸭是一个很经典的例子。鸭子和鸡的形态特征十分相似,但它又有独立的行为,如浮在水面上而又移动速度快等特点。根据继承与复用思维,这是一个很好的针对初级开发者适用的生物类型题材。因此本章内容教程会教给开发者如何自定义一个新生物:水鸭。
|
||||
63
mconline/10-addon教程/第07章:自定义生物/课程10.利用Blockbench修整鸡的模型.md
Normal 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修整鸡的模型
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
在Blockbench中导入鸡的模型,从中可以看到它一共被分为6个骨骼。
|
||||
|
||||
1)body:身体
|
||||
|
||||
2)head:头部
|
||||
|
||||
3)leg0:右脚
|
||||
|
||||
4)leg1:左脚
|
||||
|
||||
5)wing0:右翼
|
||||
|
||||
6)wing1:左翼
|
||||
|
||||
这样的骨骼分组十分符合我们对新生物水鸭的需求。对照现实中的绿头水鸭,只需提取鸭头、鸭嘴、羽毛特征,进行个人风格化的修整,即可制作完一只水鸭模型。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
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为-3,y为12,z为-2的位置,将方块放大至长度为6,高度为2,宽度为5。将第二个方块作为小尾巴,位置放在x为-2,y为12,z为0的位置。将尺寸拉至4格长,1格高,4格宽。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
6)最后我们的水头鸭会长成这样,不用担心,现在看起来贴图纹理很怪异的原因,是因为原来贴图上的像素点无法对应新增的方块面积,而变成了透明区域。再下一章我们会带大家进行贴图的绘制。
|
||||
53
mconline/10-addon教程/第07章:自定义生物/课程11.利用BlockBench为鸭画上贴图.md
Normal 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为鸭画上贴图
|
||||
|
||||
|
||||
|
||||
#### 作者:境界
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
修改完鸡的模型后,我们在右上角将blockbench列为画板模式,指针变成笔刷,点击方块区域即可上色。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
1)首先删掉原来的贴图,点击创建贴图,将贴图名称改为green_duck,勾选模板,接着一直点击确定。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
2)首先调整喙的颜色,水鸭的喙更加鲜艳,因此可以选择更鲜艳(饱和度高)的黄色,阴影选择稍微浅的土黄色。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
2)绿水鸭最显眼的是它的绿冠头,用笔刷给它画上深绿色。脖子上还有个白色红领巾,再下一层给它刷上白色。
|
||||
|
||||
4)接着将胸口,后背和大尾巴刷成棕色,小尾巴和其他身体画成白色。
|
||||
|
||||
5)让脚方块的前面,上面、侧面和一小部分的背面变透明,使用画板模式的橡皮擦即可。其他部分画成黄色。
|
||||
|
||||
6)加上一些阴影,一只继承了鸡骨骼的水鸭模型就做好了。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
7)最后一步,选择文件->导出,选择导出基岩版模型,之后在自定义水鸭时还会用到它。
|
||||
75
mconline/10-addon教程/第07章:自定义生物/课程12.继承鸡的动画.md
Normal 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",而值代表蛋的斑点颜色。
|
||||
|
||||
81
mconline/10-addon教程/第07章:自定义生物/课程13.加一点点鸭子音效.md
Normal 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射击音效,设计时播放的音效。
|
||||
144
mconline/10-addon教程/第07章:自定义生物/课程14.让水鸭活动起来.md
Normal 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(可用指令生成的)设置为true(真),is_spawnable(可用生物蛋)设置为true(真),is_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。这样一个可爱的绿头鸭就做好了。
|
||||
|
||||

|
||||
134
mconline/10-addon教程/第07章:自定义生物/课程15.练习1-水鸭浮在水上时的泡泡粒子.md
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
现在,一个在水中移动会不停冒水泡泡的绿头水鸭就做好了。
|
||||
|
||||

|
||||
171
mconline/10-addon教程/第07章:自定义生物/课程16.练习2-会攻击侵犯领地的凶狠水鸭.md
Normal 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": {
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
攻击侵犯领地的行为,可以想象成为靠近水鸭多近会引起水鸭的攻击。因此在设置一个生物拥有近战能力的时候,需要用三个行为进行组合:
|
||||
|
||||
1)minecraft:attack,它的damage值可以接受一个数组,也可以接受一个整数数值。数组情况下,可以让伤害在数组内由大到小取一个随机伤害,而一个固定数值则代表的是固定伤害。
|
||||
|
||||
2)minecraft:behavior.nearest_attackable_target,它的entity_types接受一连串的生物目标,我们在目标选择器中,同时将目标设置为mob,但又不是duck,即所有带有mob标签却不带有duck标签的生物。max_dist代表在多远距离内会被当作目标,must_see意为是否必须看到才会当作目标,reselect_targets会在一群目标里不断选择离自己最近的目标。
|
||||
|
||||
3)minecraft: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标签的实体,那样就会包括了鸡这类生物,不符合实际需求。
|
||||