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

3.8 KiB
Raw Permalink Blame History

A星寻路算法的测试场景根节点和对应挂载的脚本

!Pasted image 20240404114913.png

其中会用到的,单个寻路节点预制体,和它挂载的脚本

!Pasted image 20240404115358.png

脚本的具体内容是继承自BlockViewBase 其中声明了方块的寻路逻辑BlockLogic相关变量还有代表寻路状态的stateImage图片索引信息indexInfo距离信息disInfo还有箭头节点arrowRoot

!Pasted image 20240404115533.png

作为方块view的显示父类BlockViewBase是跟点击相关声明的OnClickDown和OnEneter也是在点击下Invoke触发即可

!Pasted image 20240404130015.png

显示逻辑还定了一个ViewState枚举分别代表不同的显示状态

!Pasted image 20240404121203.png

方块逻辑处理,是继承自IComparable接口参考声明了x和y对应的index索引是否可移动的m_walkable布尔然后就是几个对应它们的获取器 再声明队列容器,对应相邻区块,还有当前区块,对应的前一个查找区块,这个会根据,检测逻辑,完成赋值; 还有起点到当前区块的,总距离长度、优先级;

!Pasted image 20240404121110.png

这个region包含的是跟显示相关的声明还有对应的显示变化Action委托

!Pasted image 20240404121931.png

回到方块view逻辑脚本设置显示相关通过switch和case修改stateImage的颜色还有距离信息、箭头节点的显隐

!Pasted image 20240404124610.png

剩余一个case逻辑

!Pasted image 20240404124923.png

设置箭头节点方向的函数接口需要有前一个查找区块preBlock才会触发设置箭头的相关逻辑 当前方块的index和前一个方块的index相减换算得到角度偏移 通过SignedAngle的方法计算得到偏转角度然后修改箭头节点的自身旋转角度localEulerAngles即可

!Pasted image 20240404125154.png

回到外部挂载的根节点PERoot其中有俩美剧分别是当前操作类型OpEnum寻路算法模式PathFindMode

!Pasted image 20240404130536.png

CreateBlockView函数接口是用来实例化单个节点方块的

!Pasted image 20240404130834.png

回到节点方块的显示view类这是它对应的初始化函数完成方块逻辑logic的传参赋值根据x和y的Index索引设置节点名字、自身局部坐标localPosition 方块逻辑的OnViewChange委托注册是view脚本上述解析的根据ViewState枚举修改显示样式的SetViewInfo函数接口

!Pasted image 20240404131012.png

初始化函数后续分别是注册两个点击委托OnClickDown和OnEneter的逻辑鼠标左键点击调用了PERoot根节点的OnClickBlockItem函数而右键点击是设置逻辑块的Walkable布尔变量设置它是否可行走 如果不可行走,实际上可以看作是墙壁,在显示上,会是黑色方块;

!Pasted image 20240404131305.png

!Pasted image 20240404131521.png

View界面脚本消选初始化相关逻辑比较简单就是设置显示样式是默认的Walk即可

!Pasted image 20240404131616.png

回到方块逻辑Logic类初始化函数就是完成xy的索引index赋值m_walkable布尔为true默认是可行走的方块 调用PERoot根节点的CreateBlockView函数接口创建一个方块view再调用自身的OnViewChange委托回调设置方块view的显示状态是默认的walk 修改方块状态的SetWalkableState接口是通过三元运算符根据walk或者block切换m_walkable真假 消选初始化方块逻辑logic就是把m_walkable设置为true总距离设置成无穷大参考IsPositiveInfinity再调用view逻辑的消选初始化UnInitBlockView即可

!Pasted image 20240404132307.png