Epic Online Services(EOS) + Mirror を使ったUnityゲーム開発【Part2】
Part1ではEpic Online Services(以下、EOS)によるログイン処理まで実装出来ました。
Part2ではEOS + Mirrorによるルームの入室の実装を行います。
Part1はこちらです。
1. NetworkManager設定
前回、ログイン後に0002_Sample_Homeシーンに遷移するように実装しました。
このシーンでルームの作成
とルームへの入室
を行えるようにします。
NetworkManager
ルームに関する機能を実装するためには、MirrorのNetworkManagerクラスを配置する必要があります。
そのままNetworkManagerをアタッチした空のオブジェクトを作成してもよいですが、後々拡張すると思いますので新しく継承したクラスCustomNetworkManager
を作っておくことにします。
using System.Collections; using System.Collections.Generic; using Mirror; using UnityEngine; public class CustomNetworkManager : NetworkManager { }
空のオブジェクトを作成してアタッチします。
アタッチしたら以下に従って設定します。
DontDestroyOnLoad
にチェックOfflineScene
には0002_Sample_Home
をセットOnline Scene
には新しく0003_Sample_Online
シーンを作成してセットしておきます
EosTransport
EosTransportはEpicOnlineTransportで実装されたクラスです。
Mirrorで使用するTransportをこれに置き換えることでEOSのP2Pを使用することが出来るようになります。
NetworkManagerをアタッチしたオブジェクトに、EosTransportもアタッチしておきます。
EosLobbyUI
EOSのルーム機能を使用するためにEOSLobbyクラスを使います。
テスト用にEOSLobbyを継承して、GUIによる操作を追加してくれているEOSLobbyUIクラスがありますので、今回はこちらを使います。
空のオブジェクトを作成してアタッチします。
実際にゲームを作り始める際は、EOSLobbyUIクラスを参考に独自のクラスをつくると良いと思います。
GamePlayer
NetworkManagerのPlayerPrefabにNetworkBehaviourのゲームオブジェクトをセットする必要があります。
各プレイヤーが動かすプレイヤー自身のゲームオブジェクトだと捉えていただいて問題ないです。
NetworkBehaviourであれば何でも構いませんが、ちょうどMirrorのサンプル実装に使い勝手の良いゲームオブジェクトが実装されていますのでそれを使います。
Projectの検索窓にGamePlayer
と検索して、そのゲームオブジェクトをPlayerPrefabにセットします。
最終的に、以下のような状態になればOKです。
2. オンラインシーン設定
空のシーンでも問題ありませんが、シーン遷移してきたときにGamePlayerが落下してしまうので床をつくっておきます。
適当にPlaneを作成して、Positionは(0, 0, 0)にしておきます。
3. 実際にルーム作成してみる
0001_Sample_Loginから開始して、ログインに成功して0002_Sample_Homeシーンに遷移するとGUIが表示されます。
Create Lobby
をクリックすると、ルームを作成して、ホスト兼クライアントとして入室します。
入室に成功すると、0003_Sample_Onlineシーンに遷移して、カプセルのオブジェクトが生成されます。
4. マルチプレイ
ここまで出来たら、ビルドしてマルチプレイのテストをしてみましょう。
Windows向けにビルドしたら、exeを実行して立ち上げます。
同一PCで複数のクライアントでEOSにログインするには3つの方法があります。
これらについてはPart1で説明していますので詳しくはそちらを参照ください。
今回はデバイスIDを使う認証
で進めます。
ルーム作成と入室
1つ目のクライアントはこれまでどおり普通にログインして、ルーム作成まで進めてください。
2つ目のクライアントでは、ログイン前にReCreateDeviceID
にチェックを入れてログインします。
デバイスID情報は複数保持することが出来ないため、一度削除して再生成することで複数クライアントのログインを通しています。
本格的に実装を進める際はDevAuthToolを使う認証 (デバッグ専用)
をおすすめします。
2つ目のクライアントでログイン出来たら、今度はFind Lobbies
をクリックします。
しばらくすると、下記画像のように存在するルーム一覧と入室のためのJoin
ボタンが表示されます。
1つ目のクライアントで作成したルーム名であることと、PlayerCountが0でないことを確認してJoin
をクリックして入室します。
GamePlayerオブジェクトが2つ表示されていれば成功です。
次回はEOSのバージョンを1.14.2から1.15.4にアップデートします。