实体移动
在《我的世界》中,实体能够通过行走、游泳或飞行在世界中移动。要实现这些行为,您的实体通常需要多个行为组件,这些组件可分为不同类型。
阅读本教程时,请记住您的实体至少需要以下组件:
TIP
创建移动实体的最佳方法是从原版行为包中选择一个类似的实体,并将其组件复制到您的实体中。
例如,幻翼、恶魂或鹦鹉都是飞行实体,但它们在游戏中的行为差异很大!使用最接近的实体作为模板。
移动速度
您的实体首先需要一个速度组件。这决定了实体在世界中的移动速度。
| 组件 | 说明 |
|---|---|
| minecraft:movement | 设置移动速度(必需) |
| minecraft:underwater_movement | 设置在水中的移动速度。 |
| minecraft:flying_speed | 设置空中的移动速度。 |
您应始终包含 minecraft:movement。根据需要添加其他两个组件。
所有原版“游泳”实体(如海豚)都包含 underwater_movement。只有部分飞行实体拥有 flying_speed,原因尚不明确。
移动类型
您的实体还需要一个移动类型。移动类型决定了实体在世界中移动的硬编码行为。
每个实体只能包含一种移动类型。选择最符合您需求的组件。通常 basic、amphibious 和 fly 是不错的选择。
| 组件 | 说明 |
|---|---|
| minecraft:movement.amphibious | 此移动控制允许生物在水中游泳并在陆地上行走。 |
| minecraft:movement.basic | 此组件增强实体的移动能力。 |
| minecraft:movement.fly | 此移动控制使生物飞行。 |
| minecraft:movement.generic | 此移动控制允许生物飞行、游泳、攀爬等。 |
| minecraft:movement.hover | 此移动控制使生物悬停。 |
| minecraft:movement.jump | 此移动控制使生物在移动时跳跃,并指定跳跃间隔。 |
| minecraft:movement.skip | 此移动控制使生物在移动时跳跃。 |
| minecraft:movement.sway | 此移动控制使生物左右摇摆,模拟游泳效果。 |
移动修饰符
移动修饰符提供了关于实体如何移动的额外信息。这些组件对普通实体不是必需的,但您应该了解它们。
| 组件 | 说明 |
|---|---|
| minecraft:water_movement | 设置实体在水中的摩擦力。 |
| minecraft:rail_movement | 设置实体只能在铁轨上移动。 |
| minecraft:friction_modifier | 设置实体在陆地上的摩擦力。 |
导航
您的实体还需要一个导航组件。导航组件包含许多字段,例如实体是否可以开门或躲避阳光。如何设置这些字段通常比选择哪个导航组件更重要!
导航组件种类繁多的原因是每个组件都提供略有不同的硬编码行为。选择名称/描述最符合您实体导航需求的组件。
任何时候,您的实体只能拥有一个导航组件。
TIP
此组件非常重要。您应参考原版示例以获取字段和值的灵感。
| 组件 | 说明 |
|---|---|
| minecraft:navigation.climb | 允许此实体生成包含垂直墙壁的路径,如原版蜘蛛。 |
| minecraft:navigation.float | 允许此实体通过在空中飞行生成路径,如普通恶魂。 |
| minecraft:navigation.generic | 允许此实体通过行走、游泳、飞行和攀爬生成路径,并可上下跳跃一个方块。 |
| minecraft:navigation.fly | 允许此实体在空中生成路径,如原版鹦鹉。 |
| minecraft:navigation.swim | 允许此实体生成包含水的路径。 |
| minecraft:navigation.walk | 允许此实体通过行走和上下跳跃一个方块生成路径,如普通生物。 |
导航能力
除了移动和导航组件外,还有许多其他组件可以增强实体在世界中移动的能力。
| 组件 | 说明 |
|---|---|
| minecraft:annotation.break_door | 允许实体破坏门。必须在导航组件中启用此功能。 |
| minecraft:annotation.open_door | 允许实体开门。必须在导航组件中启用此功能。 |
| minecraft:buoyant | 指定实体可以在哪些液体中漂浮。 |
| minecraft:can_climb | 允许此实体攀爬梯子。 |
| minecraft:can_fly | 标记实体能够飞行。路径查找器不会限制其下方必须有固体方块。 |
| minecraft:can_power_jump | 允许实体像原版马一样进行强力跳跃。 |
| minecraft:floats_in_liquid | 设置此实体可以在液体方块中漂浮。 |
| minecraft:jump.dynamic | 定义动态跳跃控制,根据生物的速度修饰符调整跳跃属性。 |
| minecraft:jump.static | 赋予实体跳跃能力。 |
还有像 minecraft:preferred_path 这样的组件,可以根据基于方块的路径成本修改导航。
AI目标
导航组件告诉实体_如何_生成路径,但没有说明_何时_或_何地_生成路径。这就是AI组件的用途。
AI目标以 behavior 为前缀,并通过优先级系统选择要运行的行为。优先级较低的行为会优先执行。
通常,您应添加多个AI组件,并设置不同的优先级。这些组件叠加在一起,将为您的实体创建逼真的移动和行为。一如既往,原版实体提供了关于添加哪些组件以及设置哪些属性/优先级的良好模板。
本文档无法列出所有生成路径的AI组件。以下是一些示例:
| 组件 |
|---|
| minecraft:behavior.random_stroll |
| minecraft:behavior.follow_owner |
| minecraft:behavior.move_to_water |
| minecraft:behavior.stroll_towards_village |
完整列表请访问 bedrock.dev。
路径查找
让实体前往特定位置是市场内容最常见的需求之一。 实现路径查找的最佳方法是使用第二个实体,第一个实体会被吸引到该实体。我将这个次要实体称为标记。如果您对如何创建标记感到困惑,请访问 虚拟实体 页面。
思路
我们实现路径查找的方法实际上相当简单:使我们的实体对标记具有攻击性,然后将标记放置在我们希望实体前往的位置。难点在于知道添加哪些组件才能实现长距离路径查找。
组件
可以根据需要编辑这些组件以创建良好的路径查找。确保将 nearest_attackable_target 指向您的标记实体。这需要一个 family_type,因此您应在标记上设置一个。
别忘了添加一些基本的移动和导航组件,以便您的实体能够移动。
"minecraft:behavior.nearest_attackable_target": {
"priority": 0,
"reselect_targets": true,
"target_search_height": 1000,
"within_radius": 1000,
"must_see": false,
"entity_types": [
{
"filters": [
{
"test": "is_family",
"subject": "other",
"value": "waypoint_1"
}
],
"max_dist": 1000
}
]
},
"minecraft:attack": {
"damage": 0
},
"minecraft:behavior.melee_attack": {
"priority": 0,
"require_complete_path": true,
"track_target": true
},
"minecraft:follow_range": {
"value": 1000,
"max": 1000
}检测到达路径点
您可以使用 minecraft:target_nearby_sensor 检测是否到达标记实体:
"minecraft:target_nearby_sensor": {
"inside_range": 2.0,
"outside_range": 4.0,
"must_see": true,
"on_inside_range": {
"event": "reached_waypoint"
},
"on_outside_range": {
"event": "not_reached_waypoint"
}
}其他
TIP
您可以通过命令触发实体行走动画。 /execute as @e[type=...] at @s run tp @s ^^^0.1 这样您可以控制实体的移动方向并使其看起来自然。



