ET服务器框架学习笔记(十七)
文章目录
前言
上篇分析了关于ET服务器的服务(进程)管理器。本篇则分析ET服务器框架里面的寻路系统
一、PathfindingComponent
ET寻路客户端与服务器都使用的一套寻路方式。本篇只梳理ET有关寻路的,具体的寻路算法,比较复杂不是一两篇就能介绍完毕的,能用起来即可。
1.PathReturnQueue
简单来说他保存了所有路径,一个PathfindingComponent对应有且只有一个PathReturnQueue。
- pathReturnQueue:一个Path队列,用于存放所有需要寻路的路径
- pathsClaimedSilentlyBy:Path声明时用到的对象,防止Path被回收
2.PathProcessor
路径处理器,将上面实例化的PathReturnQueue传入进去,当作要处理的路径队列。同时声明需要的处理器数量,以及是否开启多线程。在ET中处理器指定为1个,并且不开启多线程。
- ThreadControlQueue:处理器关联的一个方法,专门用于管理队列中的Path,主要就是提供Path之间关联的管理,不对Path内部做处理。
- GraphNode:图形节点,对应于寻路数据中的各个节点,包含各种节点信息
- PathNode:路径节点,包含图形节点,同时会附带PathNode parent:父节点,最最要的是包含了G,H,F,这些值分别代表,G:一条路径中,从起点移动到这个点要花的耗费,H:从这个点到目标点预估的耗费,预估的算法很多(曼哈顿,弗洛伊德,等等算法),F:G+H算是一个综合评定。有了这些耗费计算,才能从所有节点中找到最优解,即最短路等相关路径节点。
- PathHandler:用于管理一个PathNode数组,将它们形成一条路径
- PathProcessor的CalculatePaths方法,从之前的路径队列中取出一条,然后调用各个路径的CalculateStep方法(这个根据不同的路径,有各个路径自己的方式)。
3.AStarConfig
A星寻路使用的配置,主要用于从地图数据文件中读取地图文件,同时包含了
4.ABPathWrap
主要用于生成一个ABPath
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
5.Search
通过传入的ABPath,调用PathProcessor的CalculatePaths,向ABPath中添加PathNode节点数量。
6.PathModifyHelper
PathModifyHelper用于对产生后的路径进行优化处理。
StartEndModify:有时候寻路可能只有一个点,在进行移动的时候,必须要一个起点和一个终点,这个方法用于只有1个点时,复制一个点出来。同时将起点设置为初始点,因为寻路只会判定后面要经过点插入到路径中,这样当移动的时候,可能在第一步会瞬移一下。
FunnelModify:用于优化路径,通过寻路获得的路径,会获取到所有经过的路径点。真正的寻路时不需要这么多寻路点。只需要几个拐点就可以真正的寻路。这个方法首先将路径分成几段,然后在每一段中筛掉那些被包含的点,这样每一段就只有拐点存在,然后再添加到最终路径中去。
二、使用步骤
1.获取路径
根据Unit当前位置,传入目标位置,生成一条AB路径。
Unit unit = self.GetParent<Unit>();
PathfindingComponent pathfindingComponent = Game.Scene.GetComponent<PathfindingComponent>();
self.ABPath = ComponentFactory.Create<ABPathWrap, Vector3, Vector3>(unit.Position, new Vector3(target.x, target

本文介绍了ET服务器框架中的寻路系统实现,包括PathfindingComponent组件的功能及其实现细节,如PathReturnQueue、PathProcessor等,并提供了如何在ET框架中使用寻路系统的步骤。
&spm=1001.2101.3001.5002&articleId=110181921&d=1&t=3&u=bbe32761ce844d798a6d1d09947b4690)
411

被折叠的 条评论
为什么被折叠?



