回到外部调用的,逻辑节点根类PERoot,其中声明的变量,一个静态的单例Instance,在Start开始函数,设置为this就好; xy坐标的Count,分别是生成的节点,纵横最大数目,目前自定义为,20和10; blockObject就是设定,单个寻路节点的预制体类,这里设置是cell预制体,而blockRoot就是单个寻路节点,生成之后,SetParent设定的父节点; PathFindMode模式,是用于后续解析的,switch切换,不同的寻路逻辑; searchIntervel是后续解析的,寻路[[Task]]延迟时间设定; OpEnum是不同的操作逻辑阶段,是通过HideInInspector标签,隐藏起来,参考[[Unity中 HideInInspector和SerializeField的用法]]; 还有俩开始和结束,逻辑节点,和BlockMap逻辑地图,用于统一管理所有逻辑节点; 开始函数,就是完成各个的初始化; ![[Pasted image 20240404173209.png]] 运行,表现正常 ![[Pasted image 20240404174213.png]] 使用异步[[async]]的OnClickBlockItem方法,调用节点地图的UpdateMapData函数,更新邻近节点集合; 然后,通过switch,完成寻路逻辑的选型; ![[Pasted image 20240404174942.png]] 后续逻辑,就是调用节点地图的[[Task]]任务CalcPath,完成寻路的核心逻辑处理; 再拿到游戏的真实运行时间[[realtimeSinceStartup]],计算得到,不同的mode寻路模式,所使用消耗的时间,对比效率; ![[Pasted image 20240404175113.png]] Update更新函数,就是不同的按键,触发不一样的逻辑,用于重复测试 ![[Pasted image 20240404175402.png]] 运行,点击可以切换,不同的寻路逻辑mode模式 ![[Pasted image 20240404175539.png]] 广度优先搜索算法 ![[Pasted image 20240404175616.png]] 消耗时间log ![[Pasted image 20240404175702.png]] 换成A星 ![[Pasted image 20240404175735.png]] ![[Pasted image 20240404175743.png]] 其余模式的测试,同理