obsidian/笔记文件/2.笔记/九宫格AOI视野管理_第四章.md
2025-03-26 00:02:56 +08:00

3.9 KiB
Raw Permalink Blame History

回到AOICell地图方块类CellOpEnum枚举标识的是玩家实体进入、移动、退出该cell地图方块的状态

!Pasted image 20240416173522.png

AddCellOp函数接口是根据上述CellOpEnum实体状态 判断该entity实体是加入到对应该地图方块的UpdateItem实体更新逻辑cellUpdateItem变量的各个Lst队列 如果是实体离开方块也是根据EntityDriverEnum枚举判断是客户端实体count减少还是服务器实体count减少

!Pasted image 20240416173745.png

StraightMove函数接口对应的是上下左右四个方向的移动逻辑根据传参方块的数组索引判断是要从方块移除还是新进入还是移动然后调用aoi实体Entity类的移除或添加方块再调用cell自己的AddCellOp函数接口完成上述解析的UpdateItem实体各个Lst队列的数据增减处理 SkewMove函数接口则是对应斜着的四个方向具体逻辑也是跟StraightMove一致

!Pasted image 20240417113505.png

完成cellUpdateItem各个队列的数据整合后会作为传参传递到aoi管理器的数据融合OnCellEntityOpCombine函数回调然后重置cellUpdateItem即可

!Pasted image 20240417114325.png

回顾一下给外部Entity实体调用的在方块中移动和退出该方块的脚本逻辑是这俩MoveCell和ExitCellI对周边的cell方块也进行实体的更新逻辑处理

!Pasted image 20240417114519.png

EnterCell函数接口是进入方块的核心逻辑调用如果是新加入游戏也就是新加入到方块的实体是会调用TransferEnter的移动状态枚举会调用AOIEntity实体的AddAroundCellView脚本逻辑完成周边方块的添加 然后如果是方块之间移动也就是MoveCross枚举的话根据DirEnum方向枚举调用上述的 StraightMove 或 SkewMove函数接口

!Pasted image 20240417115610.png

继续完成switch判断和调用即可

!Pasted image 20240417115946.png

aoicell方块也会重写Tostring字符串打印输出

!Pasted image 20240417120030.png

回到aoimgr管理器EnterCell函数接口是实例化一个新的AOIEntity实体调用它内部的UpdatePos坐标更新传参除了xy坐标还有TransferEnter的枚举标识新加入 UpdatePos函数接口就是调用传参Entity实体内部的UpdatePos函数接口完成位置更新即可 而ExitCell是Entity实体离开当前cell方块的相关逻辑是根据cellkey这个方块名称字符在cellDic字典容器获取到对应的cell地图方块

!Pasted image 20240417120608.png

计算AOI相关的CalcAOIUpdate函数接口是一个汇总的更新函数接口包含了Entity实体的CalcEntityCellViewChange计算各个Entity实体的视野变化还有遍历所有的cell地图方块通过哈希对应的ExceptWithUnionWith函数接口,完成仨HashSet哈希容器的增删处理; 最后再调用地图方块的CalcCellOpCombine数据融合接口即可 回顾一下对应触发的实际上是场景的CellEntityOpCombine逻辑合并复用cell的计算结果优化CPU开销

!Pasted image 20240417120932.png

!Pasted image 20240417121350.png

!Pasted image 20240417121404.png

回顾一下aoi管理器内在方块间移动的是MoveCrossCell接口、在方块内移动的是MoveInsideCell接口也是调用cell对应的内部接口标识要退出对应方块的就是MarkExitEntityCell接口

!Pasted image 20240417122023.png

获取当前地图方块汇总的字典容器

!Pasted image 20240417132933.png

创建新aoicell方块的脚本逻辑完成创建、加入容器后调用OnCreateNewCell回调即可

!Pasted image 20240417121721.png

回顾一下这个回调是完成地图方块的构建后广播发送一个NtfCell协议的数据消息包

!Pasted image 20240417121851.png