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

13 KiB
Raw Blame History

title, category, mentions
title category mentions
实体移动 巧思案例
SirLich
sermah
MedicalJewel105
TheDoctor15

实体移动

在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属性。同时不要忘记添加常规的移动和导航组件。

::: code-group

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

:::

航点到达检测

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

::: code-group

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