LucifeP(ルシフェP)の日記

Unityでゲームつくっている人です。

Epic Online Services(EOS) + Mirror を使ったUnityゲーム開発【Part2】

Part1ではEpic Online Services(以下、EOS)によるログイン処理まで実装出来ました。
Part2ではEOS + Mirrorによるルームの入室の実装を行います。


Part1はこちらです。

lucifep-angel.hatenablog.com


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クラスを参考に独自のクラスをつくると良いと思います。

Memo ここまでで、MirrorによるNetworkManagerとEOSLobbyクラスの機能が重複しているようにみえてくると思います。
実はEOSLobbyの内部では、内部でMirrorのStartHostあるいはStartClientを呼び出すようにつくられて、Mirrorを利用する形で実装されています。
EOSのルーム機能を使用せずMirrorだけで良いのでは?と私は一瞬考えてしまいましたが、EOSのP2P機能を使用するためにEOSのルームに入室する必要があるのだと思います。
そのため、内部的にはMirrorのルームとEOSのルームの2つに入室しています。退室処理の実装には注意が必要です。
(※EOS公式ではルームではなくロビーという言葉が用いられます。)


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つの方法があります。

  • EpicGamesアカウント等を使うアカウント認証
  • バイスIDを使う認証
  • DevAuthToolを使う認証 (デバッグ専用)

これらについてはPart1で説明していますので詳しくはそちらを参照ください。

今回はデバイスIDを使う認証で進めます。

ルーム作成と入室

1つ目のクライアントはこれまでどおり普通にログインして、ルーム作成まで進めてください。

2つ目のクライアントでは、ログイン前にReCreateDeviceIDにチェックを入れてログインします。
バイスID情報は複数保持することが出来ないため、一度削除して再生成することで複数クライアントのログインを通しています。

本格的に実装を進める際はDevAuthToolを使う認証 (デバッグ専用) をおすすめします。

2つ目のクライアントでログイン出来たら、今度はFind Lobbiesをクリックします。
しばらくすると、下記画像のように存在するルーム一覧と入室のためのJoinボタンが表示されます。

1つ目のクライアントで作成したルーム名であることと、PlayerCountが0でないことを確認してJoinをクリックして入室します。

GamePlayerオブジェクトが2つ表示されていれば成功です。





次回はEOSのバージョンを1.14.2から1.15.4にアップデートします。