Files
netease-modsdk-wiki/docs/wiki/entities/entity-intro-bp.md
2025-03-20 11:52:46 +08:00

178 lines
5.4 KiB
Markdown
Raw Permalink 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.

---
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`。更多命名空间信息请参阅[此文档](/wiki/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"`组件组,从而激活缩放效果。
想深入了解事件的更多用法,请参阅[实体事件](/wiki/entities/entity-events)页面。
<BButton link="/entities/entity-events">实体事件详解</BButton>
## 原版应用案例
组件组与事件是原版实体实现自定义行为的核心工具。以下列举部分原版特性应用:
- 僵尸在水下停留过久后会通过事件转变为溺尸drowned
- 狐狸根据生成环境的不同,采用`minecraft:fox_red`与`minecraft:fox_active`组件组实现毛色变化
- 末影人使用事件机制实现被注视时进行攻击