Area Of Interest,兴趣范围,缩写AOI

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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