Unity人工智能实战(原书第2版)
上QQ阅读APP看书,第一时间看更新

2.4 用自制的导航网格表示世界

有时候要处理复杂的情况,比如不同类型的图,用自定义的导航网格是很有必要的,但是手动摆放图中的点非常麻烦,因为需要很长时间去完成大块区域。

我们将学习如何使用模型的网格,以便生成一个导航网格,这个网格把三角形的几何中心作为顶点,然后利用可视点表示法中学到的重要技术。

准备工作

本节需要一些自定义编辑器脚本的知识,并了解实现可见图表示中的要点。另外值得一提的是,脚本自动地实例化场景中的CustomNavMesh游戏对象,需要指定一个预制件,就像任何其他的图表示那样。

最后,重要的是创建下面这个继承自GraphVisibility的类:

操作步骤

要创建一个编辑器窗口,用于简单地处理自动化流程,而不是把重担压在图的Start函数上,否则会延迟场景的加载:

1. 创建CustomNavMeshWindow类,把它放在Editor目录中:

2. 将属性添加到编辑器窗口中:

3. 实现用于初始化和显示窗口的函数:

4. 定义OnDestroy函数:

5. 实现OnGUI函数,用于绘制窗口内部:

6. 实现OnScene函数的前半部分,用于处理在场景窗口上的左击事件:

7. 实现后半部分,用于实现点击网格的行为:

运行原理

我们创建了一个自定义的编辑器窗口,编写了用于处理场景窗口事件的代理函数OnScene。另外,可以通过遍历网格顶点数组创建图节点,计算每个三角形的几何中心。最后,利用图的LoadGraph函数计算邻接点。