客户端游戏 活跃维护

Mirage

MirageNet/Mirage

适用于 Unity 3D 的易于使用的高性能网络库

573
Stars 标星
68
Forks 分支
11
Watchers 关注
14
Open Issues
C#
主要语言
MIT
开源协议
66.9 MB
仓库大小
2 天前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:MirageNet/Mirage
git clone https://github.com/MirageNet/Mirage.git
git clone git@github.com:MirageNet/Mirage.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。

什么是海市蜃楼?

Mirage 是一个适用于 Unity 的高级网络库。它模块化、高性能,并且设计易于使用,无论你是在制作 MMO、合作游戏还是 FPS。

Mirage 已在发布的游戏中通过实战检验,并且在设计时考虑了安全性,提供了许多工具来帮助防止多人游戏中的漏洞利用。

Mirage 是开源的。欢迎提交错误报告和反馈,你可以在 Github 上打开一个 issue 或加入 Discord。

快速浏览

// Server/Client events — listen from anywhere, no central manager needed
public class GameSetup : MonoBehaviour
{
    public NetworkServer Server;
    public NetworkClient Client;

    private void Awake()
    {
        Server.Authenticated.AddListener(OnPlayerJoined);
        Server.Disconnected.AddListener(OnPlayerLeft);
        Client.Authenticated.AddListener(OnConnected);
    }

    private void OnPlayerJoined(INetworkPlayer player) { /* spawn logic */ }
    private void OnPlayerLeft(INetworkPlayer player) { /* cleanup logic */ }
    private void OnConnected(INetworkPlayer player) { /* client ready */ }
}

// NetworkBehaviour — SyncVars, RPCs, and Identity events
public class PlayerCombat : NetworkBehaviour
{
    [SyncVar]
    public int health = 100;

    private void Awake()
    {
        Identity.OnStartServer.AddListener(OnStartServer);
    }

    private void OnStartServer() { /* server-side init */ }

    [ServerRpc]
    // Rate limit to block spam
    [RateLimit(Refill = 1, MaxTokens = 5, Penalty = 10)]
    public void CmdAttack(NetworkIdentity target)
    {
        // validate and apply damage
    }

    [ServerRpc]
    [RateLimit(Refill = 1, MaxTokens = 5, Penalty = 50)]
    // return values so client can await result to know if they were successful or not
    public UniTask<bool> CmdBuyItem(int itemId)
    {
        if (!HasEnoughGold(itemId))
            return UniTask.FromResult(false);

        AddItemToInventory(itemId);
        return UniTask.FromResult(true);
    }
}

安装

要安装 Mirage,请按照以下步骤操作:

1) Mirage 需要至少 Unity 2022 LTS。你可以通过 Unity 网站或 Unity Hub 安装 Unity 2022 LTS。

你也可以使用更新的版本,但强烈建议使用 LTS 版本,因为较新的版本可能包含漏洞、故障,甚至可能直接破坏游戏项目。
2) 创建一个新项目或打开现有项目。如果打开现有项目,强烈建议在安装 Mirage 之前进行备份。
4) 添加 OpenUPM 注册表。点击 Edit 菜单,然后选择 Project settings...,选择 Package Manager,并像这样添加一个作用域注册表:

名称: OpenUPM

网址: https://package.openupm.com

作用域:

  • com.cysharp.unitask
  • com.openupm
  • com.miragenet
  • com.miragenet.mirage

4) 关闭项目设置。
5) 通过点击 Window 菜单并选择 Package Manager 来打开包管理器。然后选择 Packages,My Registries,选择 Mirage 的最新版本并点击安装,如下所示:
6) 你可以随时返回包管理器卸载 Mirage 或升级它。

替代方法:通过 Git URL 安装

如果你希望直接从 GitHub 安装特定版本或哈希值,可以在 Packages/manifest.json 文件的 dependencies 部分添加以下行:

"com.miragenet.mirage": "https://github.com/MirageNet/Mirage.git?path=/Assets/Mirage#v156.2.4",

Migrate from Mirror

如果你已经有一个使用 Mirror 的项目,并且想将其迁移到 Mirage,建议查看我们的 迁移指南 以便顺利过渡。还请查看下面的标题,因为 Mirage 与其他网络库有一些主要区别。

与 Mirror 的比较

Mirage 是 Mirror 的一个硬分叉,增加了许多功能、性能改进和安全改进。

海市蜃楼 镜子
通过包管理器安装(OpenUPM 或 GitHub URL) 从 Unity 资源商店安装
错误会以异常抛出 错误会被记录
[ServerRpc] [Command]
[ClientRpc(target = RpcTarget.Owner)] [TargetRpc]
事件:可从任何脚本监听,无中央管理器 重写方法:大型 NetworkManager 类,只有单个重写
遵循 C# 代码风格和约定 没有一致性
NetworkTime 可在 NetworkBehaviour 中使用 NetworkTime 是全局静态
可将任意数据作为消息发送 消息必须实现 NetworkMessage
结构化 SocketLayer,所有传输保持一致的连接流程 每个传输实现自己的连接逻辑

Mirage 的一些显著功能:

  • 结构良好的代码库 — 系统间边界清晰,易于导航和理解
  • 无静态状态 — 多个服务器/客户端实例可以在同一个 Unity 进程运行
  • 严格的错误处理 — 无效调用会抛出异常,使错误立即显现,而不是静默破坏状态
  • 网络行为可以在根对象或子对象上
  • 服务器 RPC 可以 返回值
  • 位打包 可轻松优化网络消息并减少带宽
  • 通过属性进行速率限制和最大长度 验证
  • 错误标记 用于跟踪行为异常的客户端及其产生的错误
  • 版本定义
  • 快速播放模式支持

Mirage 建立在基本的支柱之上:

  • 干净、可读的代码库,遵循 C# 规范
  • 没有单例或全局静态状态
  • 高测试覆盖率

开发环境设置

如果你想为 Mirage 做出贡献,请按照以下步骤操作:

Linux 和 Mac

1) 确保已安装 git。在 Linux 上,通过你的包管理器安装。在 macOS 上,它包含在 Xcode 命令行工具中。
2) 克隆 Mirage 仓库:

    git clone https://github.com/MirageNet/Mirage.git

3) 在 Unity 2022.3 LTS 或更高版本中打开克隆的仓库。

窗口

1) 安装 git 或使用您首选的 git 客户端。
2) 以管理员身份,使用符号链接支持进行克隆:

    git clone -c core.symlinks=true https://github.com/MirageNet/Mirage.git
如果你不想使用管理员权限,[为你的账户添加符号链接支持](https://www.joshkel.com/2018/01/18/symlinks-in-windows/)。
如果你不启用符号链接,你将能够在 Mirage 上工作,但 Unity 将看不到示例。

3) 在 Unity 2022.3 LTS 或更高版本中打开并尽情享受!

传输与套接字

Mirage 支持多种数据传输方式:

  • 原生 UDP 套接字(Windows 和 Linux 默认)并可回退到 C# UDP 套接字(macOS 及其他平台默认)
  • Steam(通过 MirageSteamworks)
  • Epic 在线服务(通过 EpicSocket)
  • WebGL 客户端的 WebSocket(通过 SimpleWebSocket)

相关项目

贡献

  1. 请参阅上面的开发环境设置。
  2. Fork 这个 Mirage 仓库。
  3. 使用你新的 fork,创建你的功能分支:git checkout -b my-new-feature
  4. 然后提交你的更改:git commit -am 'Add some feature'
  5. 将其推送到分支:git push origin my-new-feature
  6. 提交一个 pull 请求,并让团队审核你的工作。 :smiley:

团队将尽快审核,并给出批准、要求修改或详细说明拒绝的原因。

感谢使用 Mirage,我们希望看到你的项目取得成功!

本站来源与版权声明
  • 本文标题:Mirage - 适用于 Unity 3D 的易于使用的高性能网络库
  • 本文链接:https://cn121.com/clientgame/miragenet-mirage.html
  • 原项目:MirageNet/Mirage 版权归原作者 MirageNet 及贡献者所有
  • 收录信息:本站于 2026-10-18 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 MirageNet/Mirage。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出,仅将二级标题译为中文,便于按栏目定位;标题原文可在下方原仓库中查看),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。