obsidian/笔记文件/2.笔记/九宫格AOI视野管理_第一章.md

81 lines
4.0 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
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]]