1)Unity NavMesh研究
思考:毫无疑问,unity中自带的navmesh寻路是比较健全的,无奈在服务器中无法使用,这样子我们没办法做怪的导航,但是可以先体验下都有哪些api,并且可以可视化的看效果。
1)打开导航网格
Window->AI->Nagivation
基于几何体的环境生成的
点击到哪个地方,就发射一条摄像,检测下碰撞。
2)OffMeshLink组件: 打开后可以跳过去。
3)Unity中重新生成网格数据
Navigation:
Agents // 数据
Bake
4)扩展
我们不仅仅是为了在Unity中搞,而是要生成到服务器中,实现NPC的导航。
5)原理
生成多边形NavMesh小块
点的信息,边界信息,相邻信息,这样子就可以根据起点和终点去实现了。 Unity是根据AStar算法。 根据点依次移动,就生成了导航。
6)障碍物的规避
和其它代理物,可以相互避开。 ==》 RVO(考虑到速度)
2种方式:
一种是改变导航网格的信息,这样子肯定能找到目标, 开启障碍(NavMesh Obstacle的Crave)的。 // 消耗高
一种是一直尝试走,查找失败了。
7)
Navigation
Object
点击Mesh Renderers(带有Mesh Renderer脚本的都会列出来)
全选
勾选Navigation Static,此时就会发现Navigation Area下拉框变为可以选择的
点击Scene Filter下的All
点击Bake选项卡下的Bake按钮,就会发现生成的导航网格
8)体素
将场景中的物体,变成一个个小块。
2)优先队列的研究
1)用途:
海量定时器:如活动3天后开,避免轮询。
取出前面几个:
寻路搜索算法: A*算法
2)数据结构:二叉堆。
思考:这个不仅仅是定时器,也为下面的A*学习打基础,毕竟A*是基于权重的,既然是基于权重,那么优先队列中的权重就能用上了。
3)A*算法研究
1.jps // 更极致的格子寻路算法
2.AStar较为全能,即可用于三角形,又可格子
4)漏斗算法
5)导出NavMesh到服务器使用
参考资料: