打开unity客户端,这是挂载逻辑的根节点,其中完成了各个声明变量的绑定

对应用到的,异步网络通信、协议,dll程序集

客户端,对应的ClientSession网络连接,完成连接、断连、接受消息的重写,其中接受消息,会调用GameRoot逻辑根节点的,消息入队接口,后续会解析

在客户端的通用工具类,有俩枚举,分别是对应mat材质颜色、和实例化预制体,其中CellItem是地图方块、EntityItem是玩家实体

客户端的,通用工具,都是静态函数,分别是获取MeshRenderer网络,设置Material材质颜色; LoadItem函数接口,通过ItemEnum枚举,实例化游戏实体; SetCellColor函数接口,是根据索引,设置不同的地图方块颜色,颜色最大索引是9,超出边界,重新设置为1即可;

游戏根节点,对应的逻辑,声明的变量,Instance单例、loginBtn登录按钮、cam相机,设置跟随的布尔、entity实体所属Root根节点、cell地图方块所属Root根节点; 还有client客户端的异步网络连接、消息队列pkgQue; 场景内玩家汇总的,字典容器playerDic;

Start函数,执行了,打印log插件的初始化,也基于本机ip,开启客户端连接,再完成,玩家字典容器的初始化即可

HandleRspLogin函数,接收服务器端,发回来的,登录数据回包,设置当前自身玩家Entity实体对应的ID、填写到text文本; AddPkgQue函数,添加pkg数据包到消息队列pkgQue; ClickLoginBtn函数,是点击登录的逻辑,构建ReqLogin协议的消息数据包、SendMsg发送给服务器; OnApplicationQuit函数,是unity内置事件函数,退出程序,用来发送,SndExit玩家退出协议的消息包给服务器,然后关闭客户端;

接受到服务器的回包后,HandleNtfCell函数,是实例化cell地图方块,设置对应的父节点、localPosition位置、localScale缩放,再调用,通用工具类的SetCellColor函数,设置cell方块颜色

接受到服务器的回包后,HandleNtfAOIMsg函数,是实例化,其他进入游戏的玩家Entity实体

继续,把玩家放入PlayerDic字典容器,最后再设置一下,玩家的position位置即可

玩家任意移动是,RandomDirTest函数接口,在完成,任意方向移动后,发送SndMovePos协议的网络消息包,SendMsg给服务器即可

FixUpdate帧更新,unity内置事件函数,通过Input.GetAxis函数,拿到 玩家实体的客户端移动,然后,发送SndMovePos协议的网络消息包,SendMsg给服务器; 如果敲T键,会修改布尔,让玩家任意自动移动起来,方便测试;

Update更新函数,也是unity内置事件函数,监听pkg消息队列,如果不为空,就switch,根据不同的cmd协议号,触发不同的case逻辑即可,也是上述解析过的:登录、其他玩家Entity实体相关、地图方块cell相关

回到服务器端,运行,调试服务器

回到客户端,运行,点击

正常生成,玩家Entity和地图方块,一共25块,如之前解析

回顾,对应的,服务器逻辑

客户端wasd移动,生成新的cell方块,表现正常

服务器log,表现正常

回顾,服务器是可以监听,输入生成,服务器Entity玩家实体

测试100个,服务器,输入,回车

服务器,log正常

客户端,出现在玩家周边的,其他玩家,才会实例化出来,表现正常

共享,所有Entity移动,导致的地图方块生成,表现正常

unity退出游戏,服务器log正常