A星寻路算法_第一章
A星寻路算法的测试场景,根节点,和对应挂载的脚本
其中会用到的,单个寻路节点预制体,和它挂载的脚本
脚本的具体内容,是继承自BlockViewBase; 其中声明了方块的寻路逻辑BlockLogic相关变量,还有代表寻路状态的stateImage图片,索引信息indexInfo,距离信息disInfo,还有箭头节点arrowRoot;
作为方块view的显示父类BlockViewBase,是跟点击相关,声明的OnClickDown和OnEneter也是在,点击下Invoke触发即可
显示逻辑,还定了一个ViewState枚举,分别代表,不同的显示状态
方块逻辑处理,是继承自IComparable接口,参考声明了x和y对应的index索引,是否可移动的m_walkable布尔,然后就是几个,对应它们的获取器; 再声明队列容器,对应相邻区块,还有当前区块,对应的前一个查找区块,这个会根据,检测逻辑,完成赋值; 还有起点到当前区块的,总距离长度、优先级;
这个region包含的,是跟显示相关的声明,还有对应的显示变化,Action委托
回到方块view逻辑脚本,设置显示相关,通过switch和case,修改stateImage的颜色,还有距离信息、箭头节点的显隐
剩余一个case逻辑
设置箭头节点方向的函数接口,需要有前一个查找区块preBlock,才会触发,设置箭头的相关逻辑; 当前方块的index,和前一个方块的index,相减换算,得到角度偏移; 通过SignedAngle的方法,计算得到偏转角度,然后修改箭头节点的,自身旋转角度localEulerAngles即可;
回到外部挂载的,根节点PERoot,其中有俩美剧,分别是当前操作类型OpEnum,寻路算法模式PathFindMode
CreateBlockView函数接口,是用来实例化,单个节点方块的
回到节点方块的,显示view类,这是它对应的初始化函数,完成方块逻辑logic的传参赋值,根据x和y的Index索引,设置节点名字、自身局部坐标localPosition; 方块逻辑的OnViewChange委托注册,是view脚本上述解析的,根据ViewState枚举,修改显示样式的SetViewInfo函数接口;
初始化函数后续,分别是注册,两个点击委托OnClickDown和OnEneter的逻辑,鼠标左键点击,调用了PERoot根节点的OnClickBlockItem函数,而右键点击,是设置逻辑块的Walkable布尔变量,设置它是否可行走; 如果不可行走,实际上可以看作是墙壁,在显示上,会是黑色方块;
View界面脚本,消选初始化相关逻辑,比较简单,就是设置显示样式,是默认的Walk即可
回到方块逻辑Logic类,初始化函数,就是完成xy的索引index赋值,m_walkable布尔为true,默认是可行走的方块; 调用PERoot根节点的CreateBlockView函数接口,创建一个方块view,再调用自身的OnViewChange委托回调,设置方块view的显示状态,是默认的walk; 修改方块状态的,SetWalkableState接口,是通过三元运算符,根据walk或者block,切换m_walkable真假; 消选初始化,方块逻辑logic,就是把m_walkable设置为true,总距离设置成无穷大,参考IsPositiveInfinity,再调用view逻辑的,消选初始化UnInitBlockView即可;