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

4.0 KiB
Raw Permalink Blame History

Area Of Interest兴趣范围缩写AOI

!Pasted image 20240416130822.png

九宫格AOI视野有对应两个工程分别对应客户端、服务器端其中使用了通用异步网络通信库作为,网络通信逻辑框架,参考即可

!Pasted image 20240415173443.png

服务器端通信相关的cmd枚举

!Pasted image 20240416113751.png

这是不同通信协议对应的消息包结构都是包含了可序列化Serializable标签 EnterMsg是进入游戏的实体结构包含实体ID、xy的坐标位置信息 MoveMsg是实体移动的结构也是包含移动的实体ID、xy的坐标位置信息 ExitMsg是退出游戏的实体结构包含退出的实体ID NtfCell是地图方块的结构包含方块所在的xy坐标位置信息

!Pasted image 20240416114107.png

继续SndMovePos就是玩家自身的移动结构包含玩家自身的实体IDxy坐标信息 SndExit就是玩家退出的结构包含玩家自身的实体ID

!Pasted image 20240416114706.png

继续,这分别是,客户端发过来的登录请求 ReqLogin协议和服务器返回的RspLogin 回应客户端登录结构是一个实体id

!Pasted image 20240416115319.png

统一管理、玩家实体、地图方块的NtfAOIMsg协议相关 其中enterLst是进入游戏的队列容器 moveLst是游戏内移动的队列容器 exitLst是退出游戏的队列容器 三者分别用了上述解析的EnterMsg、MoveMsg、ExitMsg协议结构体然后在Tostring的字符串打印重写逻辑中完成字符构建

!Pasted image 20240416115453.png

Pkg结构体继承自异步协议结构体AsyncMsg包含声明以上协议结构体变量

!Pasted image 20240416115814.png

服务器的Session网络连接对应逻辑继承自异步连接AsyncSession完成连接、断连接受消息包的逻辑重写其中用到的服务器根类逻辑ServerRoot会在后续解析 其中NetPack是网络包构造函数中完成连接session和消息包体pkg的初始化赋值即可

!Pasted image 20240416113909.png

在进入游戏、角色移动过程其他玩家实体item他们会进游戏、移动、进入玩家视野还有退出游戏 这里的几个结构体,分别是对应以上几种情况;

!Pasted image 20240416121936.png

声明三个list容器分别对应三种情况的实体IsEmpty布尔的获取器是三者数量的与判断逻辑 构造函数通过传参拿到容器的初始count大小容器初始化 Reset接口就是重置各个容器即可

!Pasted image 20240416125336.png

Tostring字符显示重写逻辑遍历三个数据容器完成string字符串构建

!Pasted image 20240416125543.png

AOIEntity是实体类在它之前先弄一个EntityDriverEnum枚举用来区分是unity客户端创建出来的实体还是服务器端创建出来的实体 构造函数包含实体idaoi管理器后续会解析还有个体移动的坐标相关、所在地图位置名称的cellkey字符相关

!Pasted image 20240416125639.png

地图宫格对应的类是AOICell声明了xy的索引坐标管理器还有周边aoi方块数据的数组容器AroundArr

!Pasted image 20240416125915.png

配置类包含地图名字方块大小size对应的初始化数量配置了200 还有三个int数据分别是后续会用来设置UpdateItem更新实体逻辑相关的仨数据容器的初始大小

!Pasted image 20240416130106.png

AOI管理器声明了对应的配置文件、方块大小、进入游戏的玩家AOIEntity队列容器entityLst还有地图方块字典容器cellDic搭配UpdateItem的玩家实体更新逻辑设定的俩Action委托回调函数OnEntityCellViewChange 和 OnCellEntityOpCombine 还有一个创建地图方块的Action委托OnCreateNewCell 在构造函数中,对声明出来的变量,完成初始化即可;

!Pasted image 20240416130247.png