Skip to content

实体移动

本页面镜像自
BedrockWiki

根据原始项目协议授权。本文经过AI翻译处理,如有内容遗漏,可以提交PR进行补充。

在Minecraft中,实体可以通过行走、游泳或飞行的方式在世界中移动。要为实体赋予这些行为能力,通常需要配置多种不同类型的组件。

阅读本教程时请注意,您的实体至少需要以下组件:

TIP

创建移动实体的最佳方式是从原版行为包中找到类似实体,将其组件配置复制到您的实体中。

例如像夜魅(Phantom)、恶魂(Ghast)或鹦鹉这类飞行实体,虽然具有完全不同的游戏行为,但它们都是通过基本相似的组件实现移动功能的。建议选择与目标实体最接近的原版生物作为模板。

移动速度

首先需要为实体配置移动速度组件,这些参数决定了实体在世界中的移动快慢。

组件说明
minecraft:movement设置基础移动速度(必需组件)
minecraft:underwater_movement设置水下移动速度
minecraft:flying_speed设置空中飞行速度

所有实体必须包含minecraft:movement组件。其他两个组件按需添加。

原版水中生物(如海豚)都包含underwater_movement组件。部分飞行生物具有flying_speed组件(具体配置因生物而异)。

移动方式

实体需要配置移动类型组件来定义其基础运动模式。注意每个实体只能选择一种移动类型,请根据实际需求选择最匹配的类型。

组件说明
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赋予实体基本的跳跃能力

人工智能

导航组件定义了移动方式,而AI目标组件决定移动的时机和目的地。AI目标通过优先级系统(数值越低优先级越高)控制行为选择。

通常需要叠加多个不同优先级的AI组件来形成自然的行为模式。以下为部分常用AI组件示例:

组件
minecraft:behavior.random_stroll
minecraft:behavior.follow_owner
minecraft:behavior.move_to_water
minecraft:behavior.stroll_towards_village

完整列表请访问基岩开发文档

路径规划

实现实体自动寻路是常用需求。推荐使用通过"诱饵实体"(Marker)进行引导的方案。若需要创建诱饵实体,请参考虚拟实体教程

实现思路

基本原理是使主实体对诱饵实体产生敌对行为,通过放置诱饵实体引导主实体移动。关键点在于配置正确的组件参数以实现长距离寻路。

组件配置

以下配置中需要将nearest_attackable_target指向虚体诱饵(需要为诱饵实体设置family_type属性)。同时不要忘记添加常规的移动和导航组件。

json
"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
}

航点到达检测

使用目标临近传感器检测是否到达标记位置:

json
"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 使用这种方式可以实现对实体移动路径的精确控制,并保持自然的动画效果。