当前位置: 首页 > article >正文

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、核心功能与特点

基于组件的高层抽象

  1. Mirror 提供了 NetworkManagerNetworkIdentityNetworkBehaviour 等组件,开发者只需通过继承和配置这些组件,即可快速实现网络同步逻辑,无需深入底层协议细节。

服务器-客户端架构

  1. 支持权威服务器模式(服务器控制逻辑,客户端仅负责输入和渲染)。
  2. 提供 NetworkServer 和 NetworkClient 类,管理连接、消息处理和对象同步。
  3. 支持 LAN 和互联网联机,可通过 Relay 服务器(如 Steam)实现 NAT 穿透。

序列化与同步

  1. 变量同步:通过 [SyncVar] 属性标记变量,自动将状态从服务器同步到客户端。
  2. 指令同步:使用 [Command](客户端调用服务器方法)和 [ClientRpc](服务器调用客户端方法)实现远程过程调用(RPC)。
  3. Transform 同步:内置 NetworkTransform 组件自动同步物体位置、旋转和缩放。

可扩展性与灵活性

  1. 支持自定义序列化、消息类型和网络传输层(如 TCP、UDP、WebSockets)。
  2. 允许开发者覆盖默认行为(如连接认证、对象生成规则)。

跨平台支持

  1. 兼容 Unity 支持的几乎所有平台(PC、移动端、主机、WebGL 等)。

社区与生态

  1. 丰富的文档和示例项目(如多人射击、RPG、实时策略模板)。
  2. 活跃的 Discord 社区和 GitHub 仓库,便于问题解决和功能讨论。
  3. 与常用插件(如 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 安装依赖

  1. 打开 Unity Editor,进入顶部菜单:
    Window > Package Manager
  2. 在 Package Manager 窗口中:
    • 确保选择 ​Unity Registry​ 作为包源。
  3. 搜索并安装以下包:
    • ​**"Unity UI" (com.unity.ugui)**​
      • 确保版本为 2.0.0(可能需要升级 Unity)。
    • ​**"Newtonsoft Json" (com.unity.nuget.newtonsoft-json)**​
      • 安装 3.0.0 版本。

3️⃣ ​手动修改 manifest.json

如果包管理器中没有找到指定版本,可手动添加依赖:

  1. 打开项目目录:YourProject/Packages/manifest.json
  2. 在 dependencies 部分添加以下内容:
    {
      "dependencies": {
        "com.unity.ugui": "2.0.0",
        "com.unity.nuget.newtonsoft-json": "3.0.0",
        // 其他依赖...
      }
    }
  3. 保存文件,重启 Unity Editor。

4️⃣ ​验证依赖是否加载

  • 重启 Unity 后,检查 ​Package Manager​ 中是否已正确加载这两个包。
  • 如果出现版本冲突,尝试删除项目目录下的 Library 文件夹并重新导入资源包。


http://www.kler.cn/a/570917.html

相关文章:

  • nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析
  • 【C#】winform设计一个等待窗口
  • 集群、分布式与微服务架构 区别
  • antd,Form,范围选择
  • 代码随想录算法训练营第三十一天 | 56. 合并区间 738.单调递增的数字
  • 二、QT和驱动模块实现智能家居-----3、安装并配置QT
  • AcWing 6138 奶牛体检
  • 长时间目标跟踪算法(3)-GlobalTrack:A Simple and Strong Baseline for Long-termTracking
  • SOUI基于Zint生成EAN码
  • 详解DeepSeek模型底层原理及和ChatGPT区别点
  • VMware虚拟机IP配置
  • 2.css简介
  • VUE表单项无法重置的问题
  • ### **Android核心系统服务深度解析(AMS/ATMS/WMS/DMS)**
  • 注意力机制详解笔记 Attention is all I donot understand!
  • 机试题——通讯录合并
  • 基于值函数的强化学习算法之SARSA详解
  • 字节跳动发布 Trae AI IDE!支持 DeepSeek R1 V3,AI 编程新时代来了!
  • spark 常见操作命令
  • 【三.大模型实战应用篇】【7.自然语言转SQL升级版:更智能的查询生成】