Unity Mirror 多房间匹配
文章目录
- 一 、一些唠叨
- 二 、案例位置
- 三、多房间匹配代码解析
- 四、关于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负责.
个人认为这个例子用于做一些简单的小游戏是可以的,当数据交互量比较多的则不适合.例子中扔有不少知识点值得借鉴.
正式应该可能还需要后端配合,如使用每一个房间开启另一个进程的方式.或使用扩展性的方式.
相关文章:
Unity Mirror 多房间匹配
文章目录 一 、一些唠叨二 、案例位置三、多房间匹配代码解析四、关于MatchInterestManagement五、总结 一 、一些唠叨 最近使用Mirror开发了一款多人同时在线的肉鸽塔防游戏,其目的是巩固一下Mirror这个插件的熟练度,另一方面是想和身边的朋友一起玩一下自己开发的游戏. 但是…...
基于flask+vue框架的的医院预约挂号系统i1616(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,医生,科室信息,就诊信息,医院概况,挂号信息,诊断信息,取消挂号 开题报告内容 基于FlaskVue框架的医院预约挂号系统开题报告 一、研究背景与意义 随着医疗技术的不断进步和人们健康意识的日益增强,医院就诊量逐年增加。传统的现场…...
Rust编程语言入门教程(五)猜数游戏:生成、比较神秘数字并进行多次猜测
Rust 系列 🎀Rust编程语言入门教程(一)安装Rust🚪 🎀Rust编程语言入门教程(二)hello_world🚪 🎀Rust编程语言入门教程(三) Hello Cargo…...
ubuntu部署小笔记-采坑
ubuntu部署小笔记 搭建前端控制端后端前端nginx反向代理使用ubuntu部署nextjs项目问题一 如何访问端口号配置后台运行该进程pm2 问题二 包体过大生产环境下所需文件 问题三 部署在vercel时出现的问题需要魔法访问后端api时,必须使用https协议电脑端访问正常…...
【代码审计】-Tenda AC 18 v15.03.05.05 /goform接口文档漏洞挖掘
路由器:Tenda AC 18 v15.03.05.05 固件下载地址:https://www.tenda.com.cn/material?keywordac18 1./goform/SetSpeedWan 接口文档: formSetSpeedWan函数中speed_di参数缓冲区溢出漏洞: 使用 binwalk -eM 解包固件,…...
2025年02月21日Github流行趋势
项目名称:source-sdk-2013 项目地址url:https://github.com/ValveSoftware/source-sdk-2013项目语言:C历史star数:7343今日star数:929项目维护者:JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…...
git 克隆及拉取github项目到本地微信开发者工具,微信开发者工具通过git commit、git push上传代码到github仓库
git 克隆及拉取github项目到本地微信开发者工具,微信开发者工具通过git commit、git push上传代码到github仓库 git 克隆及拉取github项目到本地 先在自己的用户文件夹新建一个项目文件夹,取名为项目名 例如这样 C:\Users\HP\yzj-再打开一个终端页面&…...
【算法基础】--前缀和
前缀和 一、一维前缀和示例模板[寻找数组的中心下标 ](https://leetcode.cn/problems/tvdfij/description/)除自身以外的数组乘积和可被k整除的子数组 一、一维前缀和 前缀和就是快速求出数组某一个连续区间内所有元素的和。 示例模板 已知一个数组arr,求前缀和 …...
统一的多摄像头3D感知框架!PETRv2论文精读
论文地址:PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images 源代码:PETR 摘要 在本文中,我们提出了PETRv2,用于从多视角图像中进行3D感知的统一框架。基于PETR [24],PETRv2探索了时间建模的…...
【Linux】Linux 文件系统—— 探讨软链接(symbolic link)
ℹ️大家好,我是练小杰,周五又到了,明天应该就是牛马的休息日了吧!!😆 前天我们详细介绍了 硬链接的特点,现在继续探讨 软链接的特点,并且后续将添加更多相关知识噢,谢谢…...
快速排序_912. 排序数组(10中排序算法)
快速排序_912. 排序数组(10中排序算法) 1 快速排序(重点)报错代码超时代码修改官方题解快速排序 1:基本快速排序快速排序 2:双指针(指针对撞)快速排序快速排序 3:三指针快…...
DEMF模型赋能多模态图像融合,助力肺癌高效分类
目录 论文创新点 实验设计 1. 可视化的研究设计 2. 样本选取和数据处理 3. 集成分类模型 4. 实验结果 5. 可视化结果 图表总结 可视化知识图谱 在肺癌早期筛查中,计算机断层扫描(CT)和正电子发射断层扫描(PET)作为两种关键的影像学手段,分别提供了丰富的解剖结构…...
Linux-CentOS 7安装
Centos 7镜像:https://pan.baidu.com/s/1fkQHYT64RMFRGLZy1xnSWw 提取码: q2w2 VMware Workstation:https://pan.baidu.com/s/1JnRcDBIIOWGf6FnGY_0LgA 提取码: w2e2 1、打开vmware workstation 2、选择主界面的"创建新的虚拟机"或者点击左上…...
Android14(13)添加墨水屏手写API
软件平台:Android14 硬件平台:QCS6115 需求:特殊品类的产品墨水屏实现手写的功能,本来Android自带的Input这一套可以实现实时展示笔迹,但是由于墨水屏特性,达不到正常的彩屏刷新的帧率,因此使用…...
AI助力下的PPT革命:DeepSeek 与Kimi的高效创作实践
清华大学出品《DeepSeek:从入门到精通》分享 在忙碌的职场中,制作一份高质量的PPT往往需要投入大量时间和精力,尤其是在临近截止日期时。今天,我们将探索如何借助 AI 工具 —— DeepSeek 和 Kimi —— 让 PPT 制作变得既快捷又高…...
【opencv】图像基本操作
一.计算机眼中的图像 1.1 图像读取 cv2.IMREAD_COLOR:彩色图像 cv2.IMREAD_GRAYSCCALE:灰色图像 ①导包 import cv2 # opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline ②读取图像 img cv2.imread(…...
帆软报表FineReport入门:简单报表制作[扩展|左父格|上父格]
FineReport帮助文档 - 全面的报表使用教程和学习资料 数据库连接 点击号>>JDBC 选择要连接的数据库>>填写信息>>点击测试连接 数据库SQLite是帆软的内置数据库, 里面有练习数据 选择此数据库后,点击测试连接即可 数据库查询 方法一: 在左下角的模板数据集…...
云手机如何进行经纬度修改
云手机如何进行经纬度修改 云手机修改经纬度的方法因不同服务商和操作方式有所差异,以下是综合多个来源的常用方法及注意事项: 通过ADB命令注入GPS数据(适用于技术用户) 1.连接云手机 使用ADB工具连接云手机服务器,…...
VUE中的组件加载方式
加载方式有哪些,及如何进行选择 常规的静态引入是在组件初始化时就加载所有依赖的组件,而懒加载则是等到组件需要被渲染的时候才加载。 对于大型应用,可能会有很多组件,如果一开始都加载,可能会影响首屏加载时间。如…...
天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制
天 锐 蓝盾终端安全管理系统以终端安全为基石,深度融合安全、管理与维护三大要素,通过对桌面终端系统的精准把控,助力企业用户构筑起更为安全、稳固且可靠的网络运行环境。它实现了管理的标准化,有效破解终端安全管理难题…...
计算机网络之物理层——基于《计算机网络》谢希仁第八版
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
区块链中的递归长度前缀(RLP)序列化详解
文章目录 1. 什么是RLP序列化?2. RLP的设计目标与优势3. RLP处理的数据类型4. RLP编码规则详解字符串的编码规则列表的编码规则 5. RLP解码原理6. RLP在以太坊中的应用场景7. 编码示例分析8. 总结 1. 什么是RLP序列化? 递归长度前缀(RLP&…...
分布式简单理解
基本概念 应⽤(Application)/系统(System) 为了完成⼀整套服务的⼀个程序或者⼀组相互配合的程序群。⽣活例⼦类⽐:为了完成⼀项任 务,⽽搭建的由⼀个⼈或者⼀群相互配的⼈组成的团队。 模块(Module)/组件…...
记录:Docker 安装记录
今天在安装 ollama 时发现无法指定安装目录,而且它的命令行反馈内容很像 docker ,而且它下载的模型也是放在 C 盘,那么如果我 C 盘空间不足,就装不了 deepseek-r1:70b ,于是想起来之前安装 Docker 的时候也遇到过类似问…...
Leetcode 二叉树展开为链表
java solution class Solution {public void flatten(TreeNode root) {//首先设置递归终止条件if(root null) return;//分别递归处理左右子树,//递归需要先处理子问题(子树的拉平),然后才能处理当前问题(当前节点的指…...
IEEE官方期刊缩写查询pdf分享
可以直接保存...
RabbitMQ 消息队列 优化发送邮件
express 发送邮件 最简单的异步发送邮件方法为何要使用 RabbitMQ?如何在 Node 项目中集成 RabbitMQ? 一、 不用 await 发送邮件 在实际开发之前,不妨先思考下,我们最终的目的是为了让邮件异步发送。那发送邮件这里有个await&am…...
【AI】常见的AI工具地址和学习资料链接
AI工具地址: DeepSeek:DeepSeekChatGPT-4o:https://openai.com/chatgpt/overview/Kimi:Kimi.ai - 会推理解析,能深度思考的AI助手豆包:豆包讯飞星火:讯飞星火大模型-AI大语言模型-星火大模型-科…...
NetLogon 权限提升漏洞
参考文章:CVE-2020-1472NetLogon权限提升漏洞_cve-2020-1472复现 谢公子-CSDN博客 域控机器账户:WIN-0V0GAORDC17 域控 ip:192.168.72.163 域内攻击者机器 ip:192.168.72.158,host:WIN10-01 攻击者 kali…...
【C++】 Flow of Control
《C程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记 文章目录 1、选择结构1.1、if 语句1.2、嵌套的 if 语句1.3、条件运算符 ?:1.4、switch 语句 2、循环结构2.1、while 语句2.2、do-while 语句2.3、 for 循环2.4、循环嵌套…...
