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

3.3 KiB
Raw Permalink Blame History

回到场景相关的BattleStage逻辑TickStage函数接口后续会在while循环中不断调用 其中的具体逻辑首先是调用RandomServerAI函数接口让服务器创建的Entity实体任意移动 然后从enterOPQue队列中出队获取新加入的Entity实体调用aoicell地图方块的EnterCell接口完成实体的加入方块 然后调用BattleEntity的OnEnterStage接口设置枚举PlayerStateEnum的变量是Online在线即可

!Pasted image 20240417133151.png

!Pasted image 20240417133554.png

继续遍历当前所有的地图cell方块发送地图相关的消息包到对应的Entity实体 moveOPQue移动队列完成实体出队再调用aoi管理器的UpdatePos更新实体的移动位置即可 最后再调用aoi管理器的CalcAOIUpdate函数接口完成cell地图方块的哈希表容器数据增删操作逻辑完成cell方块的数据处理合并融合

!Pasted image 20240417133612.png

在服务器的逻辑根类,会开始调用,之前解析过的,服务器相关逻辑; 这俩uint整型分别对应的是服务器创建Entity实体、客户端创建Entity实体它们的唯一uid都是从1000开始自增计算

!Pasted image 20240417134034.png

服务器根类逻辑也是对应弄一个Instance单例还声明和初始化了通用异步的AsyncNet服务器连接、消息包的ConcurrentQueue线程安全队列packQue场景stage、和一个复用的random随机数

!Pasted image 20240417134248.png

初始化函数就是当前机器的ip和端口传参开启服务器和InitStage实例化场景完成初始配置

!Pasted image 20240417134424.png

!Pasted image 20240417134531.png

AddMsgPack函数接口是往消息包队列完成网络消息包pack入队的操作 CreateServerEntity函数接口就是基于边界border区间内随机创建一个服务器Entity实体最后也是调用stage场景的EnterStage接口加入场景即可

!Pasted image 20240417134807.png

这是玩家发送登录请求后服务器对应的处理LoginStage函数接口是创建一个对应unity客户端实例化出来的Entity实体也是调用stage场景的EnterStage接口加入场景即可 发送RspLogin协议的消息回包给unity客户端

!Pasted image 20240417135011.png

Tick函数接口在while循环中判断消息队列是否不为空如果不为空就switch拿到对应的协议号进入不同的case逻辑 如果是ReqLogin登录请求就调用上述解析的LoginStage登录接口 如果是SndMovePos玩家个体移动请求就调用场景的MoveEntity移动接口 如果是SndExit玩家个体的退出请求也是调用场景的Exit退出游戏接口即可 最后会调用场景的TickStage接口

!Pasted image 20240417134731.png

开启服务器的Main主函数是通过Task完成服务根逻辑的Init初始化 在while死循环中不断调用根节点的Tick逻辑 需要注意的是服务器在监听键盘输入ReadLine监听如果输入monsterCount是int整型数字 如果不为0就会进入到Task的whil循环中创建任意的服务器Entity实体用于测试

!Pasted image 20240417135548.png