跳到正文
Qiita · Unity 开发社区· 来源· YamadaAyato·· 2 小时前AI 评分30

Unity 6 使用 FishNet、FishyEOS 和 EOS 实现 P2P 多人联机环境搭建(第1回)

【Unity 6】FishNet × FishyEOS × EOSでP2Pマルチプレイを実装する【全4回・第1回】

正文 · AI 翻译

第1回:构建P2P多人游戏环境

前言

为了实现Unity中的在线多人游戏,我们引入了**FishNet、FishyEOS和Epic Online Services(EOS)**。

本文是系列文章的第1部分,共4篇。

本次将基于我们在实际开发的Unity项目中的验证结果,介绍从包的安装到Epic Developer Portal以及Unity端初始设置的整个过程。

本次目标

  • 导入FishNet・FishyEOS・EOS插件
  • 在Epic Developer Portal中配置EOS使用设置
  • 在Unity中设置NetworkManager和Transport
  • 准备进入下一次的认证与P2P连接测试

本文将介绍实际验证过的配置。根据SDK或Unity版本的不同,界面和设置项可能会有所差异。

1. 使用環境

項目 使用環境
游戏引擎 Unity 6000.6.3f1
开发操作系统 Windows
网络库 FishNet(Git UPM版)
传输层 FishyEOS(Git UPM 版)
EOS 插件 Unity 6.1.2 用 EOS 插件
EOS SDK 1.19.1.2
包管理 Unity Package Manager

本次验证采用的是由主机玩家同时兼任服务器的Host-Client方式。

所使用的库的作用

库 役割
FishNet 处理玩家生成、同步和RPC等网络功能
FishyEOS FishNetとEOS P2P通信をつなぐTransport
EOS Plugin for Unity UnityからEpic Online Servicesを利用するためのプラグイン

簡単に表すと、以下の関係です。

Unity Game
    │
  FishNet
    │
  FishyEOS
    │
EOS Plugin for Unity
    │
Epic Online Services

FishNetだけではEOSを使ったP2P通信にはならないため、FishyEOSとEOS Pluginを組み合わせます。

2. FishNetの導入

首先导入FishNet。

FishNet也可以通过Asset Store导入,但本次使用Git URL通过Unity Package Manager进行管理。

導入手順

  1. 在Unity中打开Window → Package Manager

  2. 点击左上角的+按钮

  3. 选择Install package from git URL...

  4. 输入以下URL

    https://github.com/FirstGearGames/FishNet.git?path=Assets/FishNet
    
  5. 点击Install

安装完成后,如果在 Package Manager 中看到 FishNet,则导入完成。

image.png

官方仓库:

3. 导入 EOS Plugin for Unity

接下来,我们将导入用于在 Unity 中处理 EOS 的插件。

本次使用了EOS Plugin for Unity 6.1.2。

導入手順

如果使用 Git URL 进行安装,请提前安装 Git 和 Git LFS。

  1. 打开Window → Package Manager

  2. 选择+ → Install package from git URL...

  3. 输入以下 URL

    https://github.com/EOS-Contrib/eos_plugin_for_unity_upm.git
    
  4. 确认安装完成

image.png

关于 Samples

EOS插件中准备了用于确认各项功能的示例。

官方安装指南中也提到了导入Samples,但本次我们使用自写代码验证了认证和通信处理,因此没有使用示例。

如需使用,请在Package Manager中选择EOS Plugin,并从Samples进行导入。

通过Git URL导入时,获取的版本可能会因导入时间不同而有所变化。

本文中进行动作确认的是6.1.2版本。若重视可复现性,请通过Git的修订版等方式固定版本。

官方仓库:

公式導入手順:

4. FishyEOS的引入

FishyEOS是用于在FishNet中利用EOS进行P2P通信的传输层(Transport)。

传输层是指负责在网络上传输和接收数据的通信机制。

FishNet管理游戏内的网络处理,而FishyEOS则利用EOS P2P通信来发送和接收数据。

導入手順

  1. 打开Window → Package Manager

  2. 选择+ → Install package from git URL...

  3. 输入以下URL

    https://github.com/ETdoFresh/FishyEOS.git?path=/FishNet/Plugins/FishyEOS
    
  4. 确认安装完成

image.png

安装完成后,如果Package Manager中显示FishNet-FishyEOS,则表示安装已完成。

此外,请从Inspector的Add Component中搜索FishyEOS,并确认组件已显示。

实际添加和配置组件的步骤将在第7章介绍。

官方仓库:

FishyEOS需与FishNet和EOS Plugin配合使用。

如果更新了这些版本,请确认兼容性。

5. Epic Developer Portal的设置

接下来进行使用EOS所需的设置。

请使用Epic Games账号访问以下地址:

5-1. 创建产品

从开发者门户创建新的Product。

本次为了验证,创建了名为BossBattle的Product。

Product作成画面

输入产品名称后点击作成。

Product是用于管理使用EOS的游戏和应用程序的单位。

创建后可以确认以下信息。

項目 役割
Product ID EOS上的产品标识符
沙盒ID 用于区分开发、测试等环境的标识符
部署ID 用于标识所采用的EOS部署环境的标识符

Product・Sandbox・Deployment情報

这些ID将在稍后Unity侧的EOS配置中使用。

每个ID是用于识别环境的信息。它与Client Secret等认证信息不同。

在本文中,为了便于理解设置项,屏幕截图中的实际ID已被隐藏。

5-2. 创建Client Policy

接下来,设置使用EOS的客户端权限。

从Product的Product Settings → Clients创建Client Policy。

Client Policy用于定义应用程序可以访问的EOS功能和权限。

首先,打开与客户端相关的设置画面。

Client関連の設定画面

由于需要为客户端分配客户端策略,因此请先创建策略。

Client Policyの作成手順

本次验证使用了以下设置。

設定項目 設定例
策略名称 任意
策略类型 点对点
用户必需 开启

Client Policy設定画面

本次使用了Peer2Peer预设,但该预设并非仅将权限限定于P2P通信。

请确认预设中包含的权限,并考虑在产品版中使用Custom Policy,仅允许必要的功能。

关于Client Policy的权限设置

在验证阶段为了简化设置而使用了预设,但在实际发布的游戏中,注意最小权限原则非常重要。

请勿授予对不必要EOS功能的访问权限。

5-3. 创建Client

创建Client Policy后,添加Client。

本次以GameClient的名称进行了创建。

Client Name是用于管理的名称,可以设置任意名称。

创建时,请分配之前设置的Client Policy。

创建Client时,将发行以下信息。

項目 説明
Client ID 用于识别EOS Client的ID
Client Secret Client的认证信息

这些将在Unity侧的EOS Configuration中使用。

注意处理Client Secret

Client Secret是认证信息,请勿向第三方公开。

官方文档:

6. Unity端的EOS配置

完成Developer Portal的设置后,设置Unity端的EOS Configuration。

打开EOS Plugin的设置画面,注册在Developer Portal中创建的信息。

请参考以下图片,打开 EOS Configuration 的设置界面。

EOS Configuration画面

需要配置的信息

在以下画面中,输入或选择 Product、Deployment、Client 等信息。

EOS Configurationの設定項目

項目 設定内容
Product ID 已创建的 Product 的 ID
Sandbox ID 使用的沙箱ID
部署ID 使用的部署ID
客户端ID 创建的客户端的客户端ID
客户端密钥 创建的客户端的客户端密钥
平台 Windows

在本环境中,输入后需要点击Save All Changes进行保存。

特别是,即使输入了配置信息但下拉菜单中未显示候选项时,请尝试以下步骤。

  1. 输入各信息
  2. 点击Save All Changes进行保存
  3. 选择 Deployment 或 Client Credentials
  4. 再次通过Save All Changes保存

最后,请确认已正确选择了面向 Windows 的 Deployment 和 Client Credentials。

由于本次也将使用 Developer Authentication Tool 进行认证,因此 EOS Configuration 的Auth Scope Flags设置为Basic Profile。

关于 Developer 认证的实现将在第2回中详细讲解。

7. 配置 FishNet 的 NetworkManager

最后,在Unity的NetworkManager中配置FishyEOS。

NetworkManager 的配置

FishNet 中已准备了预先设置的NetworkManager Prefab。

请从 Project 窗口中查找位于以下位置的 Prefab。

FishNet: Networking Evolved → Demos → Prefabs → NetworkManager

FishNetのNetworkManager Prefabの場所

将NetworkManager Prefab拖拽到Hierarchy中,放置到场景里。

Prefab已预先设置了用于通过FishNet进行通信管理的基本组件。

FishyEOS的设置

选择放置后的NetworkManager GameObject,从Inspector中添加FishyEOS组件。

接着,将添加的FishyEOS分配给TransportManager的Transport引用。

本次的主要设置如下。

項目 設定
传输 FishyEOS
套接字名称 FishyEOS
自动认证 关闭
远程产品用户 ID 在实现连接处理时进行设置

image.png

Socket Name需要在通信的主机与客户端之间保持一致。

这次为了使用自制的认证类执行 EOS Connect 的登录,将Auto Authenticate设为了 OFF。

关于 EOSManager

在本次验证项目中,我们在与NetworkManager相同的GameObject上添加了EOSManager组件并进行了运行确认。

image.png

EOSManager是用于管理EOS SDK初始化、登录处理等的组件。

不过,FishyEOS的官方README中建议不要将EOSManager直接放置在场景中,而是使用FishyEOS侧的EOS.GetManager()等机制。

本文介绍了实际验证过的配置,但请根据所导入的版本和初始化方式调整设置,并注意避免EOSManager重复。

具体的认证处理将在第2回中讲解。

关于PlayerSpawner

PlayerSpawner用于生成已连接客户端的玩家。

由于本次暂不创建玩家Prefab,Player Prefab保持未设置状态即可。

image.png

在后续文章中验证NetworkObject的生成与同步时再进行设置。

此外,NetworkManager的Spawnable Prefabs用于管理通过网络生成的Prefab。

这部分将在第3回中详细讲解。

8. 至此的确认

本次暂不进行实际的P2P连接。

如果确认以下项目,则第一次环境构建已完成。

  • FishNet 已正常安装
  • EOS Plugin 已正常安装
  • FishyEOS 已正常安装
  • 已在 Developer Portal 中创建 Product、Client Policy 和 Client
  • Unity 的 EOS Configuration 已保存
  • NetworkManager的Transport已设置为FishyEOS
  • Unity Console中未出现因包导入导致的编译错误

导入时的注意事项

在本次环境构建中,特别需要注意以下两点。

① 确认EOS Configuration的保存状态

仅输入信息时,设置可能尚未生效。

② 管理包的版本

由于需要组合多个外部库,记录已验证可用的版本和 Git 提交,在出现问题时更容易追查原因。

此外,在使用 Git 管理 EOS 的配置文件时,请确认其中是否包含机密信息。

9. 总结

这次,我们搭建了在 Unity 中使用 EOS 实现 P2P 多人游戏所需的环境。

整理一下所用库的作用,

  • FishNet:ネットワーク上のゲームオブジェクトや通信処理を管理する
  • FishyEOS:FishNetとEOSのP2P通信をつなぐ
  • EOS Plugin:EOSの認証やP2P APIをUnityから利用する

という関係です。

これで、認証とP2P接続を実装するための準備が整いました。

次回は、チーム開発メンバーの招待とEOSの認証設定から始め、Unity Multiplayer Play Mode(MPPM)を使った2人のP2P接続を実装します。

具体而言,将介绍向 Epic Developer Portal 发送成员邀请、Device ID 认证、Developer Authentication Tool(DAT),以及使用两个不同账户进行连接测试等内容。

此外,成员邀请是针对团队开发的流程。如果是个人进行连接测试,则不一定需要向 Developer Portal 发送成员邀请。


参考資料

来源:Qiita · Unity 开发社区 · qiita.com