LoginSignup
19
13

More than 3 years have passed since last update.

Unity + Epic Online Services でオンラインゲームを作ろう ~①チャット編~

Last updated at Posted at 2020-07-12

今年5月に Epic Games から Unreal Engine 5 が大々的に発表されましたが、
同時に Epic Online Services (以下 EOS)という
リアルタイム通信対戦ゲームを開発するためのプラットフォームも発表されました。
この分野は Photon と Monobit が有名です。

なんと競合製品の Unity にも対応という謳い文句です。

ですが、まだまだサービスが開始されたばかりで公式以外に全く情報がありません。
C# の公式デモはありますが、 Unity のデモはありません。
ユーザーが増えて開発が活発になることを願って、Unity のデモを作成しました。

既知の問題

先に重大な問題を書いておきますと、 7/12 現在 ロビー検索が動きません
ロビー検索ができないと、通信相手と同じロビーに入室することができず、P2P 通信を始められません。
公式のバグレポートやフォーラムのスレッドで報告はしておりますが、なかなか修正してもらえません。

暫定対処として、ロビー作成時に発行されるロビーIDをクライアント間でどうにか共有することで、ロビーに入室しています。
このままでは Firebase などの外部サービスを立て、ロビー検索を自前で作るしかありません。
公式には早急に直していただきたいところです。

筆者環境

OS: Windows 10 Pro
Unity:Unity 2019.4.3f1

利用ライブラリ

  • UniTask
  • Epic Online Services C# SDK Ver 1.7.0

デモ

下記の Github リポジトリに配置しました。
https://github.com/okamototomoyuki/unity_eos_chat

Unity + EOS で作ったチャットになります。
ゲームじゃないじゃん ゲームに必要な機能の確認レベルです。
通信部分は P2P で実装しておりますので、
通信データをメッセージから、キャラ座標などの情報に置き換えてゲームに組み込んでいただければです。

デモを動かす

Epic Games のアカウントを2つ作成

EOS のユーザー情報には Epic Games のアカウントを使います。
メールアドレスを2つ用意してアカウントを作成してください。
https://www.epicgames.com

EOS のクレデンシャル作成

デモを動かすためにはご自身で EOS のクレデンシャルを作成していただく必要があります。
Epic Games Japan が日本語の解説動画を上げてくれております。
12:15~23:30 がクレデンシャル作成の解説です。

Unity で EXE 作成

  • Assets/ScriptableObjects/EOSSettings に作成したクレデンシャル情報を入力
  • Windows Standalone でビルド

EOS DevAuthTool を起動

ゲーム上でユーザーが EOS にログインするとき、通常はブラウザが起動してIDとパスワードを入力します。

しかし、開発中にこのログイン方法のままでは、テストのたびにテストユーザーの数だけ
「ブラウザ起動」⇒「ログイン」⇒「ログアウト」⇒「ブラウザ起動」⇒「別のユーザーでログイン」⇒…
となり、とても面倒です。

この面倒を解決してくれるのが SDK に同梱されている EOS DevAuthTool というツールです。
テストするユーザーをログイン状態に保持してくれます。

Assets/ExternalAsset/EOS-SDK-CSharp-13812567-1.7/SDK/Tools/EOS_DevAuthTool-win32-x64-1.0.1
を解凍して中身の EOS_DevAuthTool.exe を実行してください。

image.png
ポート番号の入力が求められます。
本デモでは 8765 をデフォルトにしてます。

image.png
アカウントをログインさせるページが表示されました。
先に作成した Epic Games のアカウントを2つログインさせます。

image.png
credential name は適当な名前を入力してください。
この名前はゲーム側で使用します。

image.png
二人分のログインが完了しました。
ツールは起動したままにしてください。

デモ実行

EXE を2つ起動します。

ログイン

image.png
それぞれ Dev User Name に先ほど EOS DevAuthTool で入力した credential name を入力し、Login を押してください。

ロビーの作成と入室

image.png
1. 左側で Create Lobby を押す
 しばらくすると画面が切り替わり Lobby Id 欄にランダムな文字列が生成されます。
 また、この時点で左側はロビーにログインしています。
2. 生成された文字列をコピー
3. 右側の Lobby Id 欄にペースト
4. 右側で Join Lobby を押す
両方ともに Chat と書かれたエリアが表示されたロビー入室完了です。

チャットで通信

image.png
メッセージを入力して Send ボタンを押してみましょう
もう片方の Receive 欄に表示されるはずです。
P2P 通信成功です。

細かな問題

Editor で破棄処理が機能してない

https://dev.epicgames.com/docs/services/ja/CSharp/GettingStarted/index.html
上記 C# の解説ページの「SDK を初期化してクリーンアップする」の章に
完了時に破棄処理を呼ぶようにとありますが、現在(Ver1.7) Unity Editor で機能しません。
Unity Editor を消さずに2回初期化(PlatformInterface.Initialize) を呼び出すと「Result.AlreadyConfigured」エラーになります。
このままでは ゲームを実行するたびに Unity Editor 自体を再起動しなければいけません。

https://eoshelp.epicgames.com/s/question/0D52L00004Ss2leSAB/platform-initialization-fails-from-2nd-time-on-unless-i-restart-unity
公式の回答でUnity Editor の場合は下記で回避するように、となりました。
・Result.AlreadyConfigured は無視
・破棄処理(PlatformInterface.Shutdown)呼ばない

まとめ

重大なバグが放置されてるため、まだまだ本格利用は難しいですが、

  • 無料
  • サーバー不要
  • ソーシャル機能
  • (予定)ストア機能

と成熟すればかなり魅力的なサービスになると期待してます。
よければ皆さんも情報共有どんどんして、サービスを盛り上げていきましょう。

19
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13