Unity插件-Mirror使用方法(一)Mirror介绍
目录
一、使用介绍
二、插件介绍
1、简述
2、核心功能与特点
基于组件的高层抽象
服务器-客户端架构
序列化与同步
可扩展性与灵活性
跨平台支持
社区与生态
3、典型应用场景
4、基本使用示例
安装
设置 NetworkManager
同步变量与 RPC
5、优缺点对比
6、为什么选择 Mirror?
7、常见问题
1️⃣ 检查 Unity 版本
2️⃣ 通过 Package Manager 安装依赖
3️⃣ 手动修改 manifest.json
4️⃣ 验证依赖是否加载
一、使用介绍
插件来源:Unity AssetStore
(Mirror | 网络 | Unity Asset Store)
Github:GitHub - MirrorNetworking/Mirror: #1 Open Source Unity Networking Library
官方网页:Mirror Networking – Open Source Networking for Unity
官方文档:Mirror Networking | Mirror
使用版本:Unity 2022.3.53f1c1、Mirror 96.0.1
二、插件介绍
1、简述
Unity Mirror 是一个专为 Unity 引擎设计的开源、社区驱动的网络库,主要用于简化多人联机游戏的开发。它最初是为了替代 Unity 原生的 UNet 系统(已被官方弃用)而创建的,因其轻量、灵活和高效的特点,成为 Unity 开发者构建多人游戏的热门选择。
2、核心功能与特点
基于组件的高层抽象
- Mirror 提供了
NetworkManager
、NetworkIdentity
、NetworkBehaviour
等组件,开发者只需通过继承和配置这些组件,即可快速实现网络同步逻辑,无需深入底层协议细节。
服务器-客户端架构
- 支持权威服务器模式(服务器控制逻辑,客户端仅负责输入和渲染)。
- 提供
NetworkServer
和NetworkClient
类,管理连接、消息处理和对象同步。 - 支持 LAN 和互联网联机,可通过 Relay 服务器(如 Steam)实现 NAT 穿透。
序列化与同步
- 变量同步:通过
[SyncVar]
属性标记变量,自动将状态从服务器同步到客户端。 - 指令同步:使用
[Command]
(客户端调用服务器方法)和[ClientRpc]
(服务器调用客户端方法)实现远程过程调用(RPC)。 - Transform 同步:内置
NetworkTransform
组件自动同步物体位置、旋转和缩放。
可扩展性与灵活性
- 支持自定义序列化、消息类型和网络传输层(如 TCP、UDP、WebSockets)。
- 允许开发者覆盖默认行为(如连接认证、对象生成规则)。
跨平台支持
- 兼容 Unity 支持的几乎所有平台(PC、移动端、主机、WebGL 等)。
社区与生态
- 丰富的文档和示例项目(如多人射击、RPG、实时策略模板)。
- 活跃的 Discord 社区和 GitHub 仓库,便于问题解决和功能讨论。
- 与常用插件(如 FishNet、Lobby 系统)兼容。
3、典型应用场景
-
多人联机游戏(PvP、PvE、合作模式)
-
实时同步应用(如虚拟会议、协作工具)
-
原型快速开发(无需从零实现网络逻辑)
4、基本使用示例
安装
通过 Unity Package Manager 或 GitHub 仓库导入 Mirror。
导入Mirror插件资源
设置 NetworkManager
// 创建 NetworkManager 对象并配置服务器地址、端口和玩家预制体。
public class MyNetworkManager : NetworkManager {public override void OnServerAddPlayer(NetworkConnection conn) {GameObject player = Instantiate(playerPrefab);NetworkServer.AddPlayerForConnection(conn, player);}
}
同步变量与 RPC
public class Player : NetworkBehaviour {[SyncVar]public int health = 100;[Command]public void CmdTakeDamage(int damage) {health -= damage;}[ClientRpc]public void RpcRespawn() {transform.position = Vector3.zero;}
}
5、优缺点对比
优点 | 缺点 |
---|---|
开源免费,社区支持强大 | 需要自行处理复杂同步逻辑(如预测与插值) |
学习曲线较低(相比底层 Socket) | 大型项目需优化网络流量 |
高度可定制化 | 依赖 Unity 的更新兼容性 |
6、为什么选择 Mirror?
-
UNet 的继承者:Unity 已弃用 UNet,Mirror 是社区维护的最佳替代方案。
-
轻量高效:相比 Photon 等第三方服务,Mirror 提供更多控制权且无额外成本。
-
适合中小团队:快速实现多人功能,无需深厚网络编程经验。
7、常见问题
导入 Unity 资源包时遇到的错误提示 "This Asset Package has Unity Package Manager dependencies" 意味着该资源包依赖两个特定的 UPM(Unity Package Manager)包:com.unity.ugui@2.0.0
和 com.unity.nuget.newtonsoft-json@3.0.0
。
解决方法:
1️⃣ 检查 Unity 版本
- 确保你使用的 Unity 版本与资源包兼容。
com.unity.ugui@2.0.0
通常对应 Unity 2020.3+,旧版本可能无法支持。
2️⃣ 通过 Package Manager 安装依赖
- 打开 Unity Editor,进入顶部菜单:
Window > Package Manager - 在 Package Manager 窗口中:
- 确保选择 Unity Registry 作为包源。
- 搜索并安装以下包:
- **"Unity UI" (com.unity.ugui)**
- 确保版本为
2.0.0
(可能需要升级 Unity)。
- 确保版本为
- **"Newtonsoft Json" (com.unity.nuget.newtonsoft-json)**
- 安装
3.0.0
版本。
- 安装
- **"Unity UI" (com.unity.ugui)**
3️⃣ 手动修改 manifest.json
如果包管理器中没有找到指定版本,可手动添加依赖:
- 打开项目目录:
YourProject/Packages/manifest.json
- 在
dependencies
部分添加以下内容:{"dependencies": {"com.unity.ugui": "2.0.0","com.unity.nuget.newtonsoft-json": "3.0.0",// 其他依赖...} }
- 保存文件,重启 Unity Editor。
4️⃣ 验证依赖是否加载
- 重启 Unity 后,检查 Package Manager 中是否已正确加载这两个包。
- 如果出现版本冲突,尝试删除项目目录下的
Library
文件夹并重新导入资源包。
相关文章:

Unity插件-Mirror使用方法(一)Mirror介绍
目录 一、使用介绍 二、插件介绍 1、简述 2、核心功能与特点 基于组件的高层抽象 服务器-客户端架构 序列化与同步 可扩展性与灵活性 跨平台支持 社区与生态 3、典型应用场景 4、基本使用示例 安装 设置 NetworkManager 同步变量与 RPC 5、优缺点对比 6、为什…...

HVAC 设计:使用 Ansys Discovery 探索更好的设计
通过 Ansys Discovery 及其 2025 年新功能利用 CFD,通过 Computational Insights 应对 HVAC 行业的挑战。 挑战 HVAC 行业在设计高效可靠的管道系统方面面临多项挑战: 压力损失:设计不当的管道会增加能耗并降低热性能。复杂的几何形状&…...

ChatGPT 提示词框架
作为一个资深安卓开发工程师,我们在日常开发中经常会用到 ChatGPT 来提升开发效率,比如代码优化、bug 排查、生成单元测试等。 但要想真正发挥 ChatGPT 的潜力,我们需要掌握一些提示词(Prompt)的编写技巧,并…...

004-利用Docker安装Mysql
利用Docker安装Mysql 一、在镜像仓库找到 Mysql1.镜像仓库地址2.复制命令3.下载Mysql镜像4.查看镜像 二、创建实例并启动三、用本地工具连接数据库四、设置 Mysql 配置 一、在镜像仓库找到 Mysql 1.镜像仓库地址 https://hub.docker.com 2.复制命令 docker pull mysql:8.0…...
Dify使用和入门
第一步:了解 Dify 在开始之前,先简单了解一下 Dify 是什么: Dify 是一个开源的 LLM 应用开发平台,专注于帮助开发者快速构建生产级的生成式 AI 应用。它支持知识库集成、RAG(检索增强生成)技术、复杂工作…...
高效管理 React 状态和交互:我的自定义 Hooks 实践
高效管理 React 状态和交互:自定义 Hooks 实践 在 React 中,Hooks 是一种使我们能够在函数组件中使用状态和副作用的强大工具。随着项目的增大,重复的逻辑可能会出现在多个组件中,这时使用自定义 Hooks 就非常合适。它们帮助我们…...
ESP 32控制无刷电机2
import machine import time import socket import network from machine import I2C, Pin, ADC def start_ap(): """ 启动ESP32的AP模式 """ ap network.WLAN(network.AP_IF) ap.active(True) ssid ESP32_APTest …...
揭开人工智能中 Tokens 的神秘面纱
揭开人工智能中 Tokens 的神秘面纱 在人工智能,尤其是自然语言处理(NLP)领域,"tokens" 是一个频繁出现且至关重要的概念。对于理解语言模型如何处理和理解人类语言,tokens 起着基础性的作用。那么ÿ…...
萌新学 Python 之 random 函数
random 模块:主要用来生成随机数 先导入包:import random randint(a, b),生成 [a, b] 之间的整数,包含边界 a 和 b,a 和 b 为整数 random(),生成的是 [0,1) 之间的浮点数,包含 0 不包含 1 r…...
2-2linux系统IO
文章目录 linux系统文件io1 open /close1.1 open1.2 close1.3 示例1.3.1 打开已经存在的文件 2 read/write2.1 read2.2 write使用 遗留问题:新创建的文件权限很奇怪3 lseek3.1 文件指针的移动3.2 文件拓展 perror函数 linux系统文件io 系统函数是系统专有的函数&am…...

周边游平台设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升,…...

视频批量分段工具
参考原文:视频批量分段工具 选择视频文件 当您启动这款视频批量分段工具程序后,有两种便捷的方式来选择要处理的视频文件。其一,您可以点击程序界面中的 “文件” 菜单,在下拉选项里找到 “选择视频文件” 按钮并点击;…...
Android -- 使用Sharepreference保存List储存失败,原因是包含Bitmap,drawable等类型数据
1.报错信息如下: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations 2.Bean类属性如下: data class AppInfoBean( val appName: String?, val appIcon: Drawable, val appPackage: String?,…...

java项目之基于ssm的图书馆书库管理系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的图书馆书库管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 该系统可以实现图书信息管理…...
编写一个程序,输入一个数字并输出其阶乘(Python版)
编写一个程序,输入一个数字并输出其阶乘 要计算一个数字的阶乘,可以编写一个简单的 Python 程序,使用循环或者递归来实现: 1. 使用 for 循环计算阶乘 # 输入一个数字 num int(input("请输入一个数字: "))# 初始化阶乘结果 facto…...
dify基础之prompts
摘要:在大型语言模型(LLM)应用中,Prompt(提示词)是连接用户意图与模型输出的核心工具。本文从概念、组成、设计原则到实践案例,系统讲解如何通过Prompt解锁LLM的潜能,提升生成内容的…...
实践教程:使用DeepSeek实现PDF转Word的高效方案
🎈Deepseek推荐工具 PDF文件因其跨平台、格式稳定的特性被广泛使用,但在内容编辑场景中,用户常需将PDF转换为可编辑的Word文档。传统的付费工具(如Adobe Acrobat)或在线转换平台存在成本高、隐私风险等问题。本文将使…...

网络安全审计员
在当今数字化时代,随着信息技术的迅猛发展,网络安全问题日益凸显,成为各行各业不容忽视的重要议题。特别是对于企业、政府机构等组织而言,网络安全不仅关乎数据资产的安全,更与组织的声誉、客户信任乃至法律法规的遵从…...
算法-二叉树篇13-路径总和
路径总和 力扣题目链接 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回…...

如何设计一个短链系统?
短链系统设计的关键要点: 系统功能实现 短链生成:接收长链接,先检查是否已有对应短链,存在则直接返回。否则,使用分布式 ID 生成器(如号段模式、SnowFlake 算法、数据库自增 ID、Redis 自增等)生成唯一 ID,或通过哈希算法(如 MurmurHash)处理长链接得到哈希值。再将生…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...