Unity 6 使用 FishNet、FishyEOS 和 EOS 实现 P2P 多人联机环境搭建(第1回)
【Unity 6】FishNet × FishyEOS × EOSでP2Pマルチプレイを実装する【全4回・第1回】
第1回:P2Pマルチプレイ環境の構築
はじめに
Unityでオンラインマルチプレイを実装するために、**FishNet・FishyEOS・Epic Online Services(EOS)**を導入しました。
本記事は全4回のシリーズの第1回です。
今回は、実際に制作しているUnityプロジェクトで検証した内容をもとに、パッケージの導入からEpic Developer Portal、Unity側の初期設定までを紹介します。
今回のゴール
- FishNet・FishyEOS・EOS Pluginを導入する
- Epic Developer PortalでEOSの利用設定を行う
- UnityにNetworkManagerとTransportを設定する
- 次回の認証・P2P接続テストに進める状態にする
本記事では、実際に検証した構成を紹介します。SDKやUnityのバージョンによって、画面や設定項目が異なる場合があります。
1. 使用環境
| 項目 | 使用環境 |
|---|---|
| ゲームエンジン | Unity 6000.6.3f1 |
| 開発OS | Windows |
| ネットワークライブラリ | FishNet(Git UPM版) |
| Transport | FishyEOS(Git UPM版) |
| EOSプラグイン | EOS Plugin for Unity 6.1.2 |
| 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 Pluginには、各機能を確認するためのサンプルが用意されています。
公式導入手順ではSamplesのインポートも案内されていますが、今回は自作コードで認証・通信処理を検証したため、サンプルは使用していません。
必要な場合は、Package ManagerでEOS Pluginを選択し、Samplesからインポートしてください。
Git URLから導入する場合、取得されるバージョンは導入時期によって変わる可能性があります。
本記事で動作確認したのは6.1.2です。再現性を重視する場合は、Gitのリビジョンなどでバージョンを固定してください。
公式リポジトリ:
公式導入手順:
4. FishyEOSの導入
FishyEOSは、FishNetでEOSのP2P通信を利用するためのTransportです。
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を作成する
Developer Portalから、新しいProductを作成します。
今回は検証用にBossBattleというProductを作成しました。
製品名を入力して作成を押します。
Productは、EOSを使用するゲームやアプリケーションの管理単位です。
作成後は、以下の情報を確認できます。
| 項目 | 役割 |
|---|---|
| Product ID | EOS上の製品識別子 |
| Sandbox ID | 開発・テストなどの環境を区別する識別子 |
| Deployment ID | 利用するEOSのデプロイ環境を識別する識別子 |
これらのIDは、後ほどUnity側のEOS Configurationで使用します。
各IDは環境を識別するための情報です。Client Secretなどの認証情報とは異なります。
本記事では、設定項目を分かりやすく示すため、スクリーンショット中の実際のIDを伏せています。
5-2. Client Policyを作成する
次に、EOSを利用するクライアントの権限を設定します。
ProductのProduct Settings → Clientsから、Client Policyを作成します。
Client Policyは、アプリケーションがアクセスできるEOSの機能や権限を定義するものです。
まず、Client関連の設定画面を開きます。
ClientにはClient Policyを割り当てる必要があるため、先にPolicyを作成しておきます。
今回は、検証用として次の設定を使用しました。
| 設定項目 | 設定例 |
|---|---|
| Policy Name | 任意 |
| Policy Type | Peer2Peer |
| User Required | ON |
今回は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 Configuration
Developer Portalの設定が完了したら、Unity側のEOS Configurationを設定します。
EOS Pluginの設定画面を開き、Developer Portalで作成した情報を登録します。
以下の画像を参考に、EOS Configurationの設定画面を開いてください。
設定する情報
以下の画面では、Product・Deployment・Clientなどの情報を入力・選択します。
| 項目 | 設定内容 |
|---|---|
| Product ID | 作成したProductのID |
| Sandbox ID | 利用するSandboxのID |
| Deployment ID | 利用するDeploymentのID |
| Client ID | 作成したClientのClient ID |
| Client Secret | 作成したClientのClient Secret |
| Platform | 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コンポーネントを追加します。
続いて、TransportManagerのTransport参照に、追加したFishyEOSを割り当てます。
今回の主な設定は以下のとおりです。
| 項目 | 設定 |
|---|---|
| Transport | FishyEOS |
| Socket Name | FishyEOS |
| Auto Authenticate | OFF |
| Remote Product User 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接続を行いません。
以下の項目が確認できれば、第1回の環境構築は完了です。
- FishNetが正常にインストールされている
- EOS Pluginが正常にインストールされている
- FishyEOSが正常にインストールされている
- Developer PortalでProduct・Client Policy・Clientを作成できている
- UnityのEOS Configurationが保存されている
- NetworkManagerのTransportがFishyEOSになっている
- Unity Consoleにパッケージ導入によるコンパイルエラーが出ていない
導入時の注意点
今回の環境構築で、特に注意したいのは以下の2点です。
① EOS Configurationは保存状態まで確認する
情報を入力しただけでは設定が反映されていない場合があります。
② パッケージのバージョンを管理する
複数の外部ライブラリを組み合わせるため、動作確認済みのバージョンやGitのコミットを記録しておくと、トラブル時に原因を追いやすくなります。
また、EOSの設定ファイルをGit管理する際には、機密情報が含まれていないか確認してください。
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)、異なる2アカウントでの接続テストまで紹介する予定です。
なお、メンバー招待はチーム開発向けの手順です。個人で接続テストを行う場合、必ずしもDeveloper Portalへのメンバー招待が必要になるわけではありません。
参考資料
来源:Qiita · Unity 开发社区 · qiita.com













