第5章 导航
本章主题:
- 生成导航网格;
- 根据导航网格寻路;
- 获取路径信息;
- 根据导航网格移动战士;
- 多重导航网格。
到目前为止,我们的注意力都集中在智能体上;现在我们来看看智能体所处的环境。我们将利用导航网格(navigation mesh,也称navmesh)来让智能体四处移动。导航网格是智能体可移动区域的一种多边形表示法。
5.1 寻路
不像其他由Lua实现的系统,导航网格和寻路将使用开源的Recast和Detour库。Recast库和工具负责由沙箱的关卡几何体生成导航网格,Detour则负责基于该网格进行寻路。
沙箱中的智能体调用Detour的服务来获取路径,然后遵循获取的路径移动。这样的数据分离可以让我们重用沙箱中的导航网格和多重导航网格,从而避免Detour或Recast和智能体直接交互。
5.2 创建导航网格
导航网格的生成会用到沙箱中所有的固定几何体。生成导航网格的C++端代码负责将沙箱的表达传入Recast库。任何质量为零的SandboxObject
对象(也就是固定对象)将用于导航网格的生成。
平面不会用于导航网格的生成,所以地面要用网格或盒子来表示。
在图5-1中可以看到一个导航网格。
图5-1 导航网格
5.2.1 配置导航网格
生成导航网格时需要了解将使用这个网格的那类智能体的一些基本信息。除非在生成时另外提供配置数据,否则沙箱会默认地自动填充导航网格的配置。可以通过一个Lua表来为Recast提供覆盖数据。下面的代码片段展示当不提供覆盖数据时, ...
Get Lua游戏AI开发指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.