Unity Mirror 示例
Explore a deprecated sample project demonstrating Relay integration with the Mirror Networking API.
阅读时间9 分钟最后更新于 1 个月前
欢迎使用 Unity Mirror 示例项目!本项目展示了如何搭配使用 Unity Transport Package (UTP)、Relay 和 Mirror 网络 API。
- Unity Transport Package (UTP) 是通过 UDP 套接字提供基于连接的抽象层的底层网络库,具有信度、排序和碎片化等可选功能。
- Relay 是一项利用“加入代码”工作流程来实现为玩家提供安全连接的 Unity 服务,使用“加入代码”型的工作流程,无需专用游戏服务器或对等通信。
- Mirror 是 Unity 平台的上层网络库。
Assets/UTPTransportAssets/Mirror要求和限制
Unity Mirror 示例具有以下要求:- 受支持的 Unity 编辑器版本。该示例项目支持版本 2020.3 或更高版本。
- Unity 游戏服务 (UGS) 帐户
- Unity 服务
- Unity Relay
- Unity Transport Package(随 Relay 提供)
- Unity 任务
- Unity Authentication Service (UAS)
- Mirror 网络 API v67.1.0
限制
该示例无法直接与 Game Server Hosting (GSH) 配合使用,需要经过修改才有可能实现配合使用。如果要修改该示例以便使用 GSH,请注意,Relay 是一种对等仿制解决方案,与 GSH 占用相同空间,因此,搭配 GSH 使用 Relay 并没有意义。先决条件
继续操作之前,请确保已满足使用该示例项目的所有先决条件:- 创建 Unity Dashboard(Unity 后台)项目
- 启用 Relay 服务
- 安装 Unity 编辑器(版本 2020.3 或更高版本)
- 登录 Unity 编辑器
- 将 Unity Dashboard(Unity 后台)项目链接到 Unity 编辑器
示例架构
Unity Mirror 示例项目具有两个不同的组件: 游戏客户端和游戏服务器组件使用 Unity 和 Mirror 网络 API。游戏客户端
游戏客户端是玩家在本机上运行的可执行程序,用于连接游戏服务器和后端服务。您可以使用 Relay 来运行游戏客户端,也可以不使用。游戏服务器
游戏服务器是运行游戏服务器进程的版本可执行程序。 您可以在本地运行游戏服务器可执行程序(用于开发)或将其托管在 Game Server Hosting 等服务上(用于生产)。指南
以下各部分介绍了如何测试、修改示例项目以及与之交互:从资源商店安装 Mirror 示例
完成以下步骤,将示例项目中的 UTP Transport 实现包安装到您的项目。此外,也可以从 GitHub 上的代码仓库中获取示例项目代码。- 转到资源商店中的“Mirror”页面。
- 选择 Add Mirror to My Assets(将 Mirror 添加到我的资源)。
- 启动 Unity 编辑器。
-
-
使用 Package Manager(包管理器)导入 Mirror。
- 选择 Window(窗口)> Package Manager(包管理器)> Packages: My Assets(包:我的资源)> Mirror > Download/Import(下载/导入)。
-
使用 Package Manager(包管理器)导入 Relay。
- 选择 Window(窗口)> Package Manager(包管理器)> Add(添加)> Add package from git URL...(从 git URL 添加包...)>“com.unity.services.relay@1.0.4”。
-
使用 Package Manager(包管理器)导入任务。
- 选择 Window(窗口)> Package Manager(包管理器)> Add(添加)> Add package from git URL...(从 git URL 添加包...)>“com.unity.jobs”。
-
将示例项目中的 目录复制到您的项目。
Assets\UTPTransport -
将 组件关联到
Mirror.NetworkManager。GameObject -
将 组件关联到
UTP.UtpTransport。GameObject -
将 组件分配到
UTP.UtpTransport组件的Mirror.NetworkManager字段中。Transport -
删除 Mirror 自动关联到您的 GameObject 中的 组件。
kcp2k.KcpTransport
-
使用 Package Manager(包管理器)导入 Mirror。
测试示例项目
要启动示例项目的两个实例用于测试,请完成以下步骤:
- 在 Unity 编辑器中打开示例项目。该项目支持 Unity 2020.3 或更高版本。
- 从编辑器的下拉菜单中选择 ParallelSync > Clones Manager(克隆管理器) 。ParallelSync 支持启动同一项目的多个编辑器实例。
- 选择 Add new clone(添加新的克隆)。
- 创建克隆后,选择 Open in New Editor(在新编辑器中打开)。
- 在两个编辑器实例中选择 Play(播放)。
- 在两个编辑器实例上选择 Auth Login(身份验证登录)。身份验证通过适用于 Relay 的 Unity Authentication Service (UAS) 来实现。
- 选择 Standard Host(标准主机),启动使用 UTP 传输的服务器。
- 选择 Client (without Relay)(客户端(不使用 Relay)),连接到使用 UTP 传输的服务器。
- 选择 Relay Host(Relay 主机),以分配 Relay 服务器。
- 选择 Client (with Relay)(客户端(使用 Relay)),连接到 Relay 服务器。
针对 Linux 的交叉编译
可以通过 Unity 编辑器对 Linux 游戏客户端和游戏服务器可执行程序进行交叉编译:- 启动 Unity Hub,然后选择 Installs(安装量)。
- 选择版本 2020.3.24f1 旁边的齿轮。
- 选择 Add modules(添加模块)。
- 选择 **Linux Build Support (IL2CPP and Mono)(Linux Build Support(IL2CPP 和 Mono))**模块,然后选择 Install(安装)。
- 启动 Unity 编辑器。
- 选择 File(文件)> Build Settings(构建设置)。
- 选择 Linux 作为目标平台。
- 选择 Server build(服务器构建),以打包服务器编译版本。否则,选择 **Build(构建)**并选择构建位置。
运行游戏客户端
可以在本地将游戏客户端组件作为独立应用程序运行,也可以通过 Unity 编辑器运行游戏客户端组件。 要将游戏客户端作为独立应用程序运行,需通过文件资源管理器或命令行界面选择游戏客户端可执行程序。 要通过 Unity 编辑器运行游戏客户端:- 使用 Unity 编辑器(版本 2020.3 或更高版本)打开 Unity Mirror 示例项目。
- 选择 Play(播放)。
运行游戏服务器
可以通过命令行界面并使用-server同时运行游戏客户端和游戏服务器
可以在本地同时运行游戏客户端和游戏服务器可执行程序,一个作为独立应用程序运行,另一个通过 Unity 编辑器运行。
例如,要将游戏服务器作为独立应用程序运行,同时通过 Unity 编辑器运行游戏客户端:
- 通过命令行界面启动游戏服务器。
- 附加 参数,以便实时查看日志。
-log - 在 Unity 编辑器中,选择 Start Client(启动客户端)。
修改示例项目
Unity Mirror 示例项目提供了用于执行以下任务的示例代码:初始化 Mirror Network Manager
Assets/Mirror/Runtime/NetworkManager.csNetworkManager添加 Relay 功能
Assets/UTPTransport/RelayNetworkManager.csRelayNetworkManagerNetworkManager- 使用加入代码。
- 获取 Relay 服务器信息。
- 请查看可用的 Relay 地区。
- 以主机玩家身份启动 NetworkDriver。
- 加入 Relay 服务器。
- 使用加入代码进行连接。
添加 UTP 功能
Assets/UTPTransport/UtpTransport.csUtpTransportMirror.Transport- 使用 Relay 加入代码配置客户端
- 从加入代码获取分配
- 获取 Relay 地区
- 分配 Relay 服务器
创建自定义 Network Manager
Assets/Scripts/MyNetworkManager.csMyNetworkManagerRelayNetworkManager公开用户界面
Assets/Scripts/MenuUI.csMenuUIMyNetworkManager在项目中针对 Mirror 使用 UTP 传输
该示例针对 Mirror 使用 Unity Transport Package (UTP) 传输。您可以按照以下各节中的说明,在项目中使用该示例中的代码。从现有传输迁移到 UTP 传输
如果准备好使用 Mirror 并希望从任一内置传输迁移到 UTP 传输,请完成以下步骤。- 启动 Unity 编辑器。
- 找到并打开包含 组件的场景。
Mirror.NetworkManager - 将 组件关联到
UTP.UtpTransport。GameObject - 将 组件分配到
UTP.UtpTransport组件的Mirror.NetworkManager字段中。Transport - 从 中删除现有的
GameObject组件。Mirror.Transport - 根据需要配置 组件的参数,例如端口和日志详细级别。
UTP.UtpTransport
搭配 UTP 使用 Relay
如果要使用 Relay,必须使用UTP.RelayNetworkManagerMirror.NetworkManagerUTP.RelayNetworkManagerMirror.NetworkManager通过身份验证后,您可以使用try{ await UnityServices.InitializeAsync(); await AuthenticationService.Instance.SignInAnonymouslyAsync(); Debug.Log("Logged into Unity, player ID: " + AuthenticationService.Instance.PlayerId);}catch (Exception e){ Debug.LogError(e);}
UTP.RelayNetworkManager