2D导航代理(Nav2DAgent)
Nav2DAgent(2D导航代理)是LayaAir 2D导航系统中用于控制寻路对象在导航网格上移动和寻路的组件。它是寻路对象与2D导航系统交互的主要组件,负责处理移动、避障和路径规划。
该组件继承自BaseNavAgent,寻路对象可以是游戏中的角色、NPC、载具等。2D导航代理只有圆形碰撞形状,简化计算并保证移动的平滑性。
在LayaAir-IDE的属性面板中,该组件显示为2D导航代理。
关于2D寻路的整体介绍,请参考2D寻路。
二、属性说明
Section titled “二、属性说明”2.1 代理类型 agentType
Section titled “2.1 代理类型 agentType”设置该导航代理的类型,需要与2D导航网格表面(NavMesh2DSurface)中配置的代理类型匹配。默认值为Humanoid。
2.2 形状与移动参数
Section titled “2.2 形状与移动参数”| 属性 | 说明 |
|---|---|
半径 radius | 设置代理的碰撞半径。决定了代理在导航网格上的占用区域,并影响其与障碍物的碰撞检测 |
速度 speed | 设置代理的最大移动速度。较大的速度可以让代理更快地到达目标点 |
最大加速度 maxAcceleration | 设置代理的最大加速度。决定了代理在开始移动、停止移动或改变方向时的加速度 |
角速度 angularSpeed | 设置代理的角速度,影响代理转向的速率 |
2.3 规避参数
Section titled “2.3 规避参数”| 属性 | 说明 |
|---|---|
规避品质级别 quality | 定义代理的回避品质。较高的质量可以生成更准确和优化的路径,但会增加计算开销 |
规避优先级别 priority | 设置代理的规避优先级。数值越小优先级越高 |
2.4 导航区域类型 areaMask
Section titled “2.4 导航区域类型 areaMask”设置代理可以通过的导航区域类型,可以限制代理只在特定类型的区域内移动。
三、常用API
Section titled “三、常用API”3.1 设置目标点
Section titled “3.1 设置目标点”通过设置destination属性来指定代理的目标位置。与3D导航代理不同,2D导航代理使用Vector2类型:
let agent = node.getComponent(Laya.Nav2DAgent);agent.destination = new Laya.Vector2(500, 300);3.2 状态查询
Section titled “3.2 状态查询”| API | 返回类型 | 描述 |
|---|---|---|
isOnNavMesh | boolean | 代理是否已绑定到导航网格上 |
isOnOffMeshLink | boolean | 代理是否正在导航网格链接上移动 |
isStop() | boolean | 代理是否已停止移动 |
destination | Vector2 | 获取代理当前的目标位置 |
3.3 路径查询
Section titled “3.3 路径查询”| API | 返回类型 | 描述 |
|---|---|---|
getCurrentPath() | Array<NavigationPathData> | 获取代理当前的路径数据 |
findDistanceToWall() | {dist, pos, normal} | 查找到最近墙面的距离、位置和法线 |
3.4 代码示例
Section titled “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);}