Unity 6 使用 FishNet、FishyEOS 和 EOS 实现 P2P 多人联机环境搭建(第1回)
【Unity 6】FishNet × FishyEOS × EOSでP2Pマルチプレイを実装する【全4回・第1回】
第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进行管理。
導入手順
-
在Unity中打开
Window → Package Manager -
点击左上角的
+按钮 -
选择
Install package from git URL... -
输入以下URL
https://github.com/FirstGearGames/FishNet.git?path=Assets/FishNet -
点击
Install
安装完成后,如果在 Package Manager 中看到 FishNet,则导入完成。
官方仓库:
3. 导入 EOS Plugin for Unity
接下来,我们将导入用于在 Unity 中处理 EOS 的插件。
本次使用了EOS Plugin for Unity 6.1.2。
導入手順
如果使用 Git URL 进行安装,请提前安装 Git 和 Git LFS。
-
打开
Window → Package Manager -
选择
+→Install package from git URL... -
输入以下 URL
https://github.com/EOS-Contrib/eos_plugin_for_unity_upm.git -
确认安装完成
关于 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通信来发送和接收数据。
導入手順
-
打开
Window → Package Manager -
选择
+→Install package from git URL... -
输入以下URL
https://github.com/ETdoFresh/FishyEOS.git?path=/FishNet/Plugins/FishyEOS -
确认安装完成
安装完成后,如果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是用于管理使用EOS的游戏和应用程序的单位。
创建后可以确认以下信息。
| 項目 | 役割 |
|---|---|
| Product ID | EOS上的产品标识符 |
| 沙盒ID | 用于区分开发、测试等环境的标识符 |
| 部署ID | 用于标识所采用的EOS部署环境的标识符 |
这些ID将在稍后Unity侧的EOS配置中使用。
每个ID是用于识别环境的信息。它与Client Secret等认证信息不同。
在本文中,为了便于理解设置项,屏幕截图中的实际ID已被隐藏。
5-2. 创建Client Policy
接下来,设置使用EOS的客户端权限。
从Product的Product Settings → Clients创建Client Policy。
Client Policy用于定义应用程序可以访问的EOS功能和权限。
首先,打开与客户端相关的设置画面。
由于需要为客户端分配客户端策略,因此请先创建策略。
本次验证使用了以下设置。
| 設定項目 | 設定例 |
|---|---|
| 策略名称 | 任意 |
| 策略类型 | 点对点 |
| 用户必需 | 开启 |
本次使用了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 的设置界面。
需要配置的信息
在以下画面中,输入或选择 Product、Deployment、Client 等信息。
| 項目 | 設定内容 |
|---|---|
| Product ID | 已创建的 Product 的 ID |
| Sandbox ID | 使用的沙箱ID |
| 部署ID | 使用的部署ID |
| 客户端ID | 创建的客户端的客户端ID |
| 客户端密钥 | 创建的客户端的客户端密钥 |
| 平台 | Windows |
在本环境中,输入后需要点击Save All Changes进行保存。
特别是,即使输入了配置信息但下拉菜单中未显示候选项时,请尝试以下步骤。
- 输入各信息
- 点击
Save All Changes进行保存 - 选择 Deployment 或 Client Credentials
- 再次通过
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
将NetworkManager Prefab拖拽到Hierarchy中,放置到场景里。
Prefab已预先设置了用于通过FishNet进行通信管理的基本组件。
FishyEOS的设置
选择放置后的NetworkManager GameObject,从Inspector中添加FishyEOS组件。
接着,将添加的FishyEOS分配给TransportManager的Transport引用。
本次的主要设置如下。
| 項目 | 設定 |
|---|---|
| 传输 | FishyEOS |
| 套接字名称 | FishyEOS |
| 自动认证 | 关闭 |
| 远程产品用户 ID | 在实现连接处理时进行设置 |
Socket Name需要在通信的主机与客户端之间保持一致。
这次为了使用自制的认证类执行 EOS Connect 的登录,将Auto Authenticate设为了 OFF。
关于 EOSManager
在本次验证项目中,我们在与NetworkManager相同的GameObject上添加了EOSManager组件并进行了运行确认。
EOSManager是用于管理EOS SDK初始化、登录处理等的组件。
不过,FishyEOS的官方README中建议不要将EOSManager直接放置在场景中,而是使用FishyEOS侧的EOS.GetManager()等机制。
本文介绍了实际验证过的配置,但请根据所导入的版本和初始化方式调整设置,并注意避免EOSManager重复。
具体的认证处理将在第2回中讲解。
关于PlayerSpawner
PlayerSpawner用于生成已连接客户端的玩家。
由于本次暂不创建玩家Prefab,Player Prefab保持未设置状态即可。
在后续文章中验证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













