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

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で管理します。

導入手順

  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 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通信を利用してデータを送受信します。

導入手順

  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を作成する

Developer Portalから、新しいProductを作成します。

今回は検証用にBossBattleというProductを作成しました。

Product作成画面

製品名を入力して作成を押します。

Productは、EOSを使用するゲームやアプリケーションの管理単位です。

作成後は、以下の情報を確認できます。

項目 役割
Product ID EOS上の製品識別子
Sandbox ID 開発・テストなどの環境を区別する識別子
Deployment ID 利用するEOSのデプロイ環境を識別する識別子

Product・Sandbox・Deployment情報

これらの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にはClient Policyを割り当てる必要があるため、先にPolicyを作成しておきます。

Client Policyの作成手順

今回は、検証用として次の設定を使用しました。

設定項目 設定例
Policy Name 任意
Policy Type Peer2Peer
User Required ON

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 Configuration

Developer Portalの設定が完了したら、Unity側のEOS Configurationを設定します。

EOS Pluginの設定画面を開き、Developer Portalで作成した情報を登録します。

以下の画像を参考に、EOS Configurationの設定画面を開いてください。

EOS Configuration画面

設定する情報

以下の画面では、Product・Deployment・Clientなどの情報を入力・選択します。

EOS Configurationの設定項目

項目 設定内容
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を押して保存する必要がありました。

特に、設定情報を入力してもプルダウンに候補が表示されない場合は、次の手順を試してください。

  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コンポーネントを追加します。

続いて、TransportManagerのTransport参照に、追加したFishyEOSを割り当てます。

今回の主な設定は以下のとおりです。

項目 設定
Transport FishyEOS
Socket Name FishyEOS
Auto Authenticate OFF
Remote Product User 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接続を行いません。

以下の項目が確認できれば、第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