obsidian/笔记文件/2.笔记/A星寻路算法_第三章.md
2025-03-26 00:02:56 +08:00

1.9 KiB
Raw Permalink Blame History

回到外部调用的逻辑节点根类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

其余模式的测试,同理