UnityMirror多房间匹配
- 其他
- 2025-08-31 18:33:02

文章目录 一 、一些唠叨二 、案例位置三、多房间匹配代码解析四、关于MatchInterestManagement五、总结
一 、一些唠叨
最近使用Mirror开发了一款多人同时在线的肉鸽塔防游戏,其目的是巩固一下Mirror这个插件的熟练度,另一方面是想和身边的朋友一起玩一下自己开发的游戏. 但是如果考虑到人数多的时候则需要同多个房间同时进行游戏,多个房间进行游戏的实现方式一直没找到答案,直到最近…原来就在Demo里有个MultipleMatches的案例. 今天就分享一下我对这个案例的解读.
二 、案例位置在正确添加Mirror插件后在Project>Mirror>Examples>MultipleMatches 目录下有Prefabs、Scenes、Scripts、三个文件夹 Prefabs:文件夹放的是游戏主控制的预设:MatchController 及 房间和游戏相关的预设 Scenes:就一个场景 Scripts:游戏相关脚本
三、多房间匹配代码解析MatchNetworkManager: 场景中的NetworkManager挂载了MatchNetworkManager脚本,该脚本继承NetworkManager主要处理网络链接相关事情. 该脚本主要重写了NetworkManager里的方法,主要是将服务器状态触发的事件传递给canvasController
CanvasController: 看名字以为是控制界面控制的,其实是记录了客户端服务器通讯 房间分组处理 玩家处理等相关数据,这个脚本分为以下几个部分:
第一部分(顶部参数): 1.OnPlayerDisconnected 用于存所有链接的客户端 2.playerMatches玩家所以的房间 3.openMatches记录了所有可供加入的房间 4.matchConnections记录了一个匹配房间中的对应的玩家 5.playerInfos玩家网络信息 6.waitingConnectionns尚未加入匹配的链接 7.localPlayerMathch localJoinedMatch selectedMatch 都为一模一样地玩家参数
第二部分(UI Functions): 1.InitializeDataey 及 ResetCanvas 方法为初始化和重置游戏的方法 第三部分(Button Calls) 在运行游戏时在界面中可以看到"创建"“加入”“准备”"开始游戏"等按钮的对应事件
第四第部分(Server Match Message Handlers) 这部分主要是服务器端相关处理函数,值得提及的是[ServerCallback]标签表示该代码只会在服务端代码中运行 通过 NetworkServer.RegisterHandler方法注册了OnServerMatchMessage方法用于处理ServerMatchMessage类型的消息
第五部分(Client Match Message Handler) 这部分主要是处理客户端相关处理的函数,同上[ClientCallback]标签表示该代码只会在客户端中运行 在客户端运行时也通过 NetworkClient.RegisterHandler(OnClientMatchMessage)注册了OnClientMatchMessage方法处理ClientMatchMessage类型事件
MatchMessages: 主要编写的是消息结构ServerMatchMessage及ClientMatchMessage都是继承于NetworkMessage接口 通讯中用到的各种数据结构 枚举等.
剩余几个则是挂载在UI上的几个脚本,主要用于触发CanvasController中的事件
四、关于MatchInterestManagement细心的朋友会发现在场景物体NetworkManager下,除了常规的NetworkManager和KcpTransport以外还有MatchInterestManagement 其作用是用于通过限制玩家接收信息的方位,从而避免全局广播带到的宽带浪费. 运行时为同一块比较的 对像设置为了一个MatchID用于区分
五、总结我通过MatchNetworkManager将一些网络事件传递到CanvasController中,每当创建一个一房间就会创能MatchController预设 MatchController预设上有MatchController脚本用于控制单局游戏的进度 房间的创建 加入 销毁则由CanvasController负责.
个人认为这个例子用于做一些简单的小游戏是可以的,当数据交互量比较多的则不适合.例子中扔有不少知识点值得借鉴.
正式应该可能还需要后端配合,如使用每一个房间开启另一个进程的方式.或使用扩展性的方式.
UnityMirror多房间匹配由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“UnityMirror多房间匹配”
下一篇
PHPWeb开发基础