目录
一、使用介绍
二、插件介绍
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
文件夹并重新导入资源包。