1. 基础c++库
2. 导航网格
3. 导航路径
4. 自动寻路
– 导航网格和寻路使用开源的Recast和Detour库
– Recast库和工具根据沙箱的关卡几何体生成导航网格
– Detour负责基于导航网格进行寻路
– 沙箱的智能体使用Detour的获取路径,
1.导航网格的配置
– Recast库根据输入的SandboxObject对象生成导航网格
– MinimumRegionArea 可以生成导航网格的最小区域面积
– WalkableClimbHeight 导航网格的可通行攀爬高度,
– WalkableHeight 导航网格的可通行高度,
– WalkableRadius 导航网格的可通行半径,
– WalkablelopeAngle 导航网格的可通行斜坡的角度
2. 构建导航网格
– 导航网格的生成是一项昂贵的操作,会阻断沙箱的运行,
– 通常导航网格的生成需要在沙箱初始化中
– 也可以在其他运行过程中生成,
3. 绘制导航网格
– 使用Sandbox.SetDebugNavigationMesh来开启或关闭导航网格的绘制
– 寻路路径需要输入起始位置,终点位置,以及导航网格
1. 路径查询
2. 查询结果
– 返回一个包含所有路径点的lua表,查找失败则返回空表
3. 随机导航终点
– Sandbox.RandomPoint函数执行小规模的查询返回一个随机点
4. 读取路径信息
– Agent.GetNearestPointOnPath获取离智能体最近的路径上的点
– Agent.GetDistanceAlongPath获取离最近点的路径通行距离
– Agent.GetPointOnPath,根据通行路径和偏移量找到导航的位置
1. 添加随机寻路
– 根据导航网格和寻路技术为智能体添加寻路功能
– 使用之前基于控制器的智能体
2. 更新智能体的路径
– 使用辅助函数随机为已抵达目标点的智能体生成新的路径
3. 绘制路径
– DebugUtilities_DrawPath用来辅助绘制路径
4. 初始化具有寻路功能的智能体
– 此时在沙箱中使用了一个导航网格
– 可以为不同种类的智能体使用不同的导航网格
原文链接:https://www.bilibili.com/read/cv9298575/