同步官网文档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: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

View File

@@ -0,0 +1,35 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/1_1.b3d4b5ee.png
hard: 进阶
time: 20分钟
---
# 行为与动画组合
#### 作者:境界
我们希望生物会因某种行为而发生动作上的改变这种改变更多是暴露在外给玩家看到的。比如希望生物在攻击时会表现攻击动画希望它们在水面上移动时会做出游泳动画。在基岩版中使用Molang语法配合动画控制器可以做出丰富的动画组合。Molang语言是基岩版独有的一种简易的表达式语言它主要作用于计算和获取游戏系统内的属性值由于设计的比较底层因此在语言优化上的优势远远大于脚本引擎。能够从游戏内获得的属性绝大多数服务于自定义实体、自定义物品、自定义方块上这些属性又由query函数所返回它们就像MODSDK上的接口根据不同query函数所服务的对象可以返回它们携带的属性。例如我想知道某只羊是否是幼体可以在molang中读取query.is_baby函数来获得羊是否是幼体。更多的query函数表可以从Minecraft wiki上找到
#### 行为与动画示例①
![](./images/1_1.png)
①羊在幼体时它看起来头特别的大比成年的羊还大。这是因为羊这个生物注册了一个放大头部位的动画判断羊是幼体使用了query.is_baby函数。从羊的生物定义文件中可以看到放大羊头的动画资源名称为baby_transform而baby_transform的播放条件是query.is_baby必须为1文档告知这个函数只会返回1真或者0假。在Molang中布尔值由数字代替不为0为真0为假。因此{动画: molang语法}即告知游戏当某只羊是幼体时则放大头部的动画会播放。这里的molang语法简写为"query.is_baby"相当于若query.is_baby不为0则为真。
#### 行为与动画示例②
![](./images/1_2.png)
①猪在移动的时候用到了walk这个动画它被注册在了猪的定义文件里。同样使用molang语法根据文档可以知道query.modified_move_speed会根据生物的速度返回0~1之间单位化取值若速度慢慢地走出来则返回1若因为部分组件行为使用了速度调整的键对可能不会刚好满足1但是由于大于0的缘故最后在上图中每当猪移动的时候都会返回真则播放walk动画。

View File

@@ -0,0 +1,37 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/2_1.5731dfa4.png
hard: 进阶
time: 20分钟
---
# 控制器与生物事件
#### 作者:境界
在前面的章节中,我们曾有提到动画控制器是存放在资源包的,因为它用来控制动画的状态切换。但实际上,行为包上也可以存在动画控制器,所存放的文件夹和大部分结构上的写法都没有太大的变化。但这又是用来做什么的呢?实际上,有许多开发者曾经希望,能够获得实体的状态后去执行行为包内的事件,亦或是直接从实体身上执行某段指令。由于这些内容都必须在服务端上运行,因此基岩版团队也为开发者在行为包上开放了另一种动画控制器,来根据生物的状态变化时,去执行一组指令或者触发生物的某个事件。
由于原版的实体都没有用到这个功能,它的格式和用途只存在于文档当中,因此寻找参考对象比较困难,以下整理了两种用途,为开发者指点迷津。
#### 行为包控制器的写法
![](./images/2_1.png)
① 在行为包根目录中创建animation_controllers的文件夹控制器文件都会放在这里。
②根据上图可以看到与资源包类似除了在每个状态下可以放置animations动画集合以外还有两个新的集合一个是“on_entry”一个是“on_exit”它们分别会在进入该状态下后和离开该状态下前去执行里面的内容。内容可以填写一组指令或者"@s 事件名称"的格式来执行一个使用了该动画控制器的实体的行为事件。
③在上图中我们根据生物在发现目标的时候给予一格10秒的1级强力状态效果并在生物失去目标的时候清理掉身上全部的状态效果。
![](./images/2_2.png)
④ 在生物行为文件里注册动画控制器并在scripts/animate下持续执行控制器同样的执行控制器前也可以额外通过Molang条件判断控制器是否需要执行。

View File

@@ -0,0 +1,24 @@
---
front:
hard: 进阶
time: 5分钟
---
# Add-on与Mod协同工作
#### 作者:境界
当前中国版有多种方式使MOD与附加包协同工作。
①使用GetEntitiesAround可以传入过滤器来筛选出范围内想要的实体。
②使用TriggerCustomEvent可以执行某个生物行为定义的生物事件。
③监听EntityDefinitionsEventServerEvent事件可以监听到游戏内的某个实体触发了某个事件。
④使用GetMolangValue可以在客户端上获取某个实体的query函数值。

View File

@@ -0,0 +1,30 @@
---
front:
hard: 进阶
time: 30分钟
---
# 简易教程①:制作带有完整攻击动画的生物
#### 作者:境界
高级史莱姆示例包下载:下载[示例包](https://g79.gdl.netease.com/guidedemo-case11.zip)。
①附录的附加包内包含一只高级史莱姆生物。让生物带有一种完整攻击动画在概念中一般是指,生物的攻击会因为动画效果带有延迟性。假如史莱姆在对目标进行进攻的时候,我们不希望它在达到攻击距离时,就对目标造成伤害。我们更希望它携带一种比较好的攻击动画,在动画的某一刻再打出那道伤害。幸运的是,原版的劫掠兽携带着这样的行为,并且它也用到了这样的动画效果。因此制作带有完整攻击动画的效果就变得简单起来。
②让实体带有攻击行为前,必须至少添加一种寻路组件行为、移动组件行为,一个移动速度组件行为和一个攻击力组件行为。寻路和移动组件行为打开后,攻击行为才会有效。移动组件行为和移动速度组件行为使生物能够移动到目标身边。攻击力组件行为添加上后,生物近战才会携带伤害能力。
③在高级史莱姆行为中我们添加了minecraft:behavior.delayed_attack即延迟攻击组件行为。详细的属性注释已经写在了组件行为旁边。
④接着切换到资源包打开动画控制器可以看到高级史莱姆的动画控制器文件。里面已经包含着一个专属于高级史莱姆的攻击动画控制器使用“molang语法”前根据文档提示可知延迟攻击组件行为所搭配的“query”函数叫做“query.is_delayed_attacking”当生物做出攻击动作时它会返回“1.0”即真否则在其他时间下返回“0.0”即假。因此攻击动画使用的循环模式为单次并在“query.is_delayed_attacking”返回“0.0”,即攻击结束时,切换回初始状态。

View File

@@ -0,0 +1,21 @@
---
front:
hard: 进阶
time: 30分钟
---
# 简易教程②:制作一种带有范围攻击的生物
#### 作者:境界
####
高级史莱姆示例包下载:下载[示例包](https://g79.gdl.netease.com/guidedemo-case11.zip)。
①再次打开附录包内的高级史莱姆行为。我们开启了一个组件组里面包含了一个“knockback_roar”组件行为它来自劫掠兽是劫掠兽吼叫时产生范围伤害和击退的组件行为。非常适合用来制作范围攻击。详细的组件键对属性已经用注释写好了。我们来关注一下如何在合适的时机将这个组件组加入进高级史莱姆的活动当中。 
②还记得本章前面提到的控制器与生物事件吗我们曾经写过一个例子是在生物发现目标时给予一种状态效果在失去目标时取消状态效果。同样我们也可以将这个模式进行改造让高级史莱姆在发现目标时对周围产生一次战吼的范围攻击并在攻击结束后开始朝玩家方向移动。因此行为包的控制器内已经写好了一个控制范围攻击触发的控制器。“query.has_target”由文档可知当实体发现目标时返回“1.0”即真反之返回“0.0”即假。因此切换到“roar”吼叫状态时必须满足发现目标。紧接着我们在“on_entry”里执行一条指令会触发一次全屏信息公告。接着触发在高级史莱姆行为内定义好的开始吼叫事件。当吼叫结束时我们又通过吼叫组件的“on_roar_end”触发一次移除吼叫组件的事件这样生物就会开始朝目标靠近直到目标消失后控制器切换回普通状态就会等待下一个目标发现时继续战吼形成一个生动行为的闭环。