用途
该技能用于 Unity 中的 NavMesh 寻路,提供安全使用模式,以避免生产环境中出现的大量寻路错误。适用场景包括:AI 移动与导航、敌人巡逻与追击、NPC 寻路、动态障碍物规避、多智能体导航。
主要能力
关键安全模式
- 查询前图校验:在计算路径前检查 AstarPath 实例、数据与图是否存在,并确认起点与终点位于可行走的导航网格上。
- 空图守卫:通过 PathfindingGuard 依次检查 AstarPath 单例、数据、图数组,以及至少一个图已扫描且节点数大于零,作为寻路就绪判断。
- NavMeshAgent 安全封装:在设置目标点前检查 agent 是否在导航网格上,使用 NavMeshPath 验证路径是否完整,并提供停止与重置路径的方法。
A* Pathfinding Project 模式
- Seeker 配置:订阅路径回调、设置可通行标签,并在销毁时取消当前路径请求。
- 路径缓存:按网格坐标缓存路径,设置缓存有效时间,过期后移除。
性能优化
- 批量路径请求:使用队列限制每帧最大请求数,异步处理待处理请求。
- 基于 LOD 的寻路:根据距离远近选择完整图、简化图或路点系统。
动态障碍物与图更新
- NavMesh 障碍物处理:启用 carving,并延迟启用雕刻以避免频繁更新。
- 图更新:通过 GraphUpdateObject 同步或异步更新指定区域。
错误恢复
- 卡住检测:监测位置变化,超过阈值时间未移动则触发事件。
- 位置恢复:使用 NavMesh.SamplePosition 采样最近有效位置,并逐步扩大搜索半径。
使用方式
资料以 C# 代码示例展示各模式的具体实现,包括 SafePathfinder、PathfindingGuard、SafeNavMeshAgent、AIPathfinder、PathCache、PathBatcher、LODPathfinder、DynamicObstacle、NavMeshUpdater、StuckDetector、NavMeshRecovery 等类。开发者可参考这些示例在项目中实现相应的安全校验、缓存、批处理与恢复逻辑。
最佳实践
- 寻路前始终检查图的有效性。
- 使用路径回调,不要阻塞等待路径计算。
- 批量处理路径请求,限制每帧计算量。
- 对重复查询缓存路径。
- 优雅处理路径失败。
- 使用 NavMesh.SamplePosition 进行验证。
- 对动态障碍物异步更新图。
- 实现卡住检测与恢复。
- 在禁用或销毁时取消路径。
- 在目标设备上分析寻路开销。
故障排查
- 寻路中出现 NullReferenceException:添加图空值检查。
- Agent 不移动:检查 isOnNavMesh。
- 路径不完整:验证目标点可达。
- 寻路缓慢:批量请求、缓存路径。
- Agent 卡住:实现卡住检测与恢复。
- 动态障碍物被忽略:启用雕刻、更新图。
限制
资料未提供安装命令、收费信息、价格、支持平台或具体版本要求,这些事实暂未提供。