添加了部分来自于BedrockWiki的文章!

This commit is contained in:
boybook
2025-03-19 22:17:04 +08:00
parent 41635cf9bb
commit c25ebf2767
558 changed files with 96136 additions and 24 deletions

View File

@@ -0,0 +1,178 @@
---
title: 实体行为包入门指南
category: 基础知识
nav_order: 1
tags:
- 指南
- 新手入门
mentions:
- SirLich
- solvedDev
- stirante
- Joelant05
- destruc7ion
- MedicalJewel105
- ChibiMango
- SmokeyStack
- ThomasOrs
---
# 实体行为包入门指南
<!--@include: @/wiki/bedrock-wiki-mirror.md-->
构成行为包实体文件基础的三个主要结构如下:本文将解释它们的含义及使用方法。
组件组component group与组件components的混淆是常见的错误来源请特别注意区分两者的区别。
## 组件Components
组件是构成Minecraft实体的逻辑构建模块。所有组件均由Mojang开发并提供给开发者使用。组件可实现多种功能例如设置实体尺寸或赋予游泳能力等。完整组件列表可参考[官方文档](https://bedrock.dev/docs/stable/Entities)。
_无法_创建自定义组件。所有组件列表由微软硬编码实现并对外提供。
需要为实体添加行为时,可通过在`minecraft:entity`对象的`components`属性中插入组件。例如要给实体添加攀爬能力,可插入组件:`"minecraft:can_climb": {}`
组件统一采用`"minecraft:<组件名称>": { <参数设置> }`格式。不同类型组件需要设置不同参数。
以下是实体内的组件应用范例:
::: code-group
```json [BP/entities/example.json#minecraft:entity]
"components": {
"minecraft:type_family": {
"family": [
"player"
]
},
"minecraft:collision_box": {
"width": 0.6,
"height": 1.8
},
"minecraft:can_climb": {},
}
```
:::
(注意`components`列表_仅_包含组件
## 组件组Component Groups
组件组用于整理归类多个组件。通过`事件events`可动态添加或移除组件组,从而实现定制化游戏玩法。
应用示例:
::: code-group
```json [BP/entities/example.json#minecraft:entity]
"component_groups": {
//组件组名称
"minecraft:cat_persian": {
//合法的组件列表(可添加多项)
"minecraft:variant": {
"value": 6
},
"minecraft:physics": {}
},
//第二个组件组名称
"wiki:example_group": {
"minecraft:type_family": {
"family": [
"wiki_is_awesome!"
]
}
}
}
```
:::
所有组件组均为自定义创建,不可直接引用其他实体的组件组。
在原版Minecraft实体中组件组使用`minecraft:`前缀命名(如示例中的`minecraft:cat_persian`。但需特别注意这些_并非_组件。开发者可自由使用任意命名规则例如上文中的`wiki:example_group`。更多命名空间信息请参阅[此文档](/concepts/namespaces)。
放在组件组中的组件不会自动生效,必须通过事件激活才能影响实体行为。多个组件组可同时生效。
## 事件Events
事件是一种特殊语法,用于在满足条件时通过组件触发添加/移除组件组的操作,从而实现实体的动态行为。
示例结构:
::: code-group
```json [BP/entities/example.json#minecraft:entity#events]
"minecraft:ageable_grow_up": { //事件名称
"remove": { //需要移除的组件组列表
"component_groups": [
"minecraft:cat_baby"
]
},
"add": {
"component_groups": [
"minecraft:cat_adult" //需要添加的组件组列表
]
}
},
```
:::
事件与组件组相同,均为完全自定义内容。不可直接照搬其他实体的事件名称(例如`"minecraft:ageable_grow_up"`)。若需类似功能,应自主设计组件组和事件。
_仅能对组件组进行添加/移除操作_无法直接操作单个组件。
当满足某些条件时,特定组件会触发事件。下方示例演示交互功能实现:
::: code-group
```json [BP/entities/example.json#minecraft:entity]
"components": {
"minecraft:interact": {
"interactions": [
{
"on_interact": {
"filters": [ //触发条件筛选器
{
"test":"is_family",
"subject": "other",
"value": "player" //被交互对象属于玩家
}
],
"target": "self", //作用目标为实体自身
"event": "wiki:on_interact" //触发指定事件
}
}
]
}
},
"component_groups": {
"wiki:interacted": {
"minecraft:scale": { //缩放组件
"value": 2
}
}
},
"events":{
"wiki:on_interact":{ //事件定义
"add": {
"component_groups": [ "wiki:interacted" ] //添加组件组
}
}
}
```
:::
当玩家与该实体交互时,将触发`"wiki:on_interact"`事件,添加`"wiki:interacted"`组件组,从而激活缩放效果。
想深入了解事件的更多用法,请参阅[实体事件](/entities/entity-events)页面。
<BButton link="/entities/entity-events">实体事件详解</BButton>
## 原版应用案例
组件组与事件是原版实体实现自定义行为的核心工具。以下列举部分原版特性应用:
- 僵尸在水下停留过久后会通过事件转变为溺尸drowned
- 狐狸根据生成环境的不同,采用`minecraft:fox_red`与`minecraft:fox_active`组件组实现毛色变化
- 末影人使用事件机制实现被注视时进行攻击