person-walking移动代理/NPC

使用 Movement_Agent 通过寻路和导航网格约束来移动实体。

移动代理

Movement_Agent 是一个用于转向和寻路的移动辅助组件。

最常见的用途是:

  • 请求一条朝向目标的路径(set_path_target)

  • 将实体限制在可行走区域内(锁定到一个 Navmesh)

circle-info

本页介绍移动和寻路。有关构建/查询导航网格,请参见 导航网格与碰撞.

Movement_Agent API 参考

Movement_Agent :: class : Component {
    Set_Path_Target_Result :: struct {
        success:        bool;
        next_point:     v2;
        move_direction: v2;
    }

    // 以给定速度请求一条朝向目标的路径。
    set_path_target :: method(target: v2, speed: float) -> Set_Path_Target_Result;

    // 将此代理限制到一个导航网格上(每帧都吸附到它上面)。
    // 传入 null 以清除。
    set_navmesh_to_lock_to :: method(navmesh: Navmesh);

    // 常见调参/状态
    movement_speed:   float;
    friction:         float;
    velocity:         v2;
    input_this_frame: v2;
}
circle-exclamation

寻路(设置目标)

调用 set_path_target 每帧都调用(或者在你的目标变化时调用)。

circle-info

set_path_target 会在这一帧后续阶段与其他代理并行处理,所以你在设置新目标后的第一帧可能不会返回 success == true.

将移动锁定到导航网格上(保持在可行走区域内)

如果一个实体永远不应该离开可行走区域,就把它锁定到一个导航网格上:

将其与 null 一起调用以清除。

创建移动中的 NPC

这是一个使用移动代理的最小“跟随玩家” NPC:

最后更新于