2D导航代理(Nav2DAgent)

一、概述

Nav2DAgent(2D导航代理)是LayaAir 2D导航系统中用于控制寻路对象在导航网格上移动和寻路的组件。它是寻路对象与2D导航系统交互的主要组件,负责处理移动、避障和路径规划。

该组件继承自BaseNavAgent,寻路对象可以是游戏中的角色、NPC、载具等。2D导航代理只有圆形碰撞形状,简化计算并保证移动的平滑性。

在LayaAir-IDE的属性面板中,该组件显示为2D导航代理

关于2D寻路的整体介绍,请参考2D寻路

二、属性说明

2.1 代理类型 agentType

设置该导航代理的类型,需要与2D导航网格表面(NavMesh2DSurface)中配置的代理类型匹配。默认值为Humanoid

2.2 形状与移动参数

属性 说明
半径 radius 设置代理的碰撞半径。决定了代理在导航网格上的占用区域,并影响其与障碍物的碰撞检测
速度 speed 设置代理的最大移动速度。较大的速度可以让代理更快地到达目标点
最大加速度 maxAcceleration 设置代理的最大加速度。决定了代理在开始移动、停止移动或改变方向时的加速度
角速度 angularSpeed 设置代理的角速度,影响代理转向的速率

2.3 规避参数

属性 说明
规避品质级别 quality 定义代理的回避品质。较高的质量可以生成更准确和优化的路径,但会增加计算开销
规避优先级别 priority 设置代理的规避优先级。数值越小优先级越高

2.4 导航区域类型 areaMask

设置代理可以通过的导航区域类型,可以限制代理只在特定类型的区域内移动。

三、常用API

3.1 设置目标点

通过设置destination属性来指定代理的目标位置。与3D导航代理不同,2D导航代理使用Vector2类型:

let agent = node.getComponent(Laya.Nav2DAgent);
agent.destination = new Laya.Vector2(500, 300);

3.2 状态查询

API 返回类型 描述
isOnNavMesh boolean 代理是否已绑定到导航网格上
isOnOffMeshLink boolean 代理是否正在导航网格链接上移动
isStop() boolean 代理是否已停止移动
destination Vector2 获取代理当前的目标位置

3.3 路径查询

API 返回类型 描述
getCurrentPath() Array<NavigationPathData> 获取代理当前的路径数据
findDistanceToWall() {dist, pos, normal} 查找到最近墙面的距离、位置和法线

3.4 代码示例

import Nav2DAgent = Laya.Nav2DAgent;

// 获取代理组件
let agent = node.getComponent(Nav2DAgent);

// 设置目标位置,代理会自动寻路
agent.destination = new Laya.Vector2(evt.stageX, evt.stageY);

// 获取当前路径用于绘制
let paths = agent.getCurrentPath();
if (paths.length >= 2) {
    let points: any = [];
    paths.forEach((point) => {
        points.push(point.pos.x, point.pos.z);
    });
    sprite.graphics.drawLines(0, 0, points, "#00000030", 5);
}
Copyright ©Layabox 2026 all right reserved,powered by LayaAir Engine更新时间: 2026-06-02 11:29:26

results matching ""

    No results matching ""