Unity3D架构设计NavMesh寻路(未完待续)
NavMesh在非常多游戏中应用广泛。不同种类的框架下NavMesh寻路发挥的淋漓尽致。与传统的A星寻路相比,NavMesh不仅降低了内存空间占有量。加快了寻路速度,还能够增加寻路角色的宽高限制,以及动态物体寻路等功能。基本上适应了大部分项目变化多端的需求。
我把写NavMesh的过程分成好几个部分,一一进行描写叙述:
一.首先要理解NavMesh核心算法。
NavMesh的核心算法就是用三角形取代传统寻路的方格,用计算拐点优化寻路路径来取代合并路径直线。
例如以下图1NavMesh寻路:
以及例如以下图2传统的A星寻路:
看到两者的区别了吧,NavMesh已三角形为寻路块,而传统的A星则以方格为寻路块。
二.NavMesh寻路中的路径优化之拐点计算。
事实上NavMesh中比較经常使用的是光照耀线法,但这里不做具体介绍,光照耀浅法具体内容地址:http://www.cnblogs.com/neoragex2002/archive/2007/09/09/887556.html
拐点计算优化路径就是到达目的地须要经过的一堆三角形中计算出最简洁的移动方式。其核心算法就是从当前点到还有一个三角形中的点之间的线段。与这条线段相交的线段所有是路径所穿越的线段,就是拐点,把所有的拐点找出来,并得到一条最长的拐点,那个拐点就是最佳的拐点位置。
三.NavMesh类设计具体解释(这里仅仅设计2D的寻路,对于3D方向的寻路,事实上是能够2D寻路取代的):
1.全部类都在同一的命名空间NavMesh内 namespace NavMesh
Triangle 三角形基础类
NavTriangle 寻路三角形类 (继承Triangle)
Line2D 线段类
Polygon 多边形类
Seeker 寻路主算法类
源码: http://www.luzexi.com/wp-content/uploads/2013/10/NavMeshScript.zip
—————————————– (未完待续) ————————————