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