概要
Github:[unity_eos_fps](https://github.com/okamototomoyuki/unity_eos_fps) Unity + Epic Online Services(以下 EOS) でマルチプレイ FPS を作ってみました。 [前回](https://qiita.com/okatom/items/654c31eea7d4009a6a08)は「ゲームを作ろう」というタイトルなのに成果物がチャットでしたが、今回は正真正銘のゲームです。Multiplay FPS Update #Unity #EpicOnlineServices pic.twitter.com/aZC45LQwF3
— オカ (@okagamedev) July 23, 2020
残念:ゲーム公開ができない
ネット上の多数の方にプレイしてもらいたく開発していたのですが、
「さぁ公開だ」となったタイミングで気づきました。
Epic Online Services のゲームの公開はまだ許可されていません。
公開用のための審査提出ボタンが「COMMING SOON」となっています。
そのため、開発チーム以外のアカウントでゲームにログインするとはじかれます。
・・・
残念ですが現在はみんなでプレイができず、ビルドしてローカルでテストしかできません。
また進展があったら報告します。😢
ロビー検索のバグの対処
前回と同じく 7/23 現在 EOS のロビー検索はまだバグで動きません。
バグ報告したスレッド の情報提供によると内部で通信エラーが発生しているようです。
同じロビーにいないと P2P 通信が始められないため、
対処として Glitch で簡易ロビー検索サーバーを作りました。
ロビーID を保持・配信するだけの API です
Glitch : eos-lobby
コードの工夫
SDK の呼び出しはコード量が増える一方だったので、拡張メソッドをどんどん書いて整理しました。
EOS の C# SDK は C++ SDK と書き方を統一するためか、インターフェースのメソッドは下記のようになってます。
- 引数に直接値を書かず、データ受け渡し用クラスのインスタンスで渡す ⇒ インスタンスを new する記述が増える
- 戻り値は処理結果(Result)の Enum ⇒ 呼び出すたびに処理が成功したか判定する必要がある
- 処理結果はコールバックで返ってくる ⇒ ネストがどんどん深くなる
なので下記のような拡張メソッドを EOS の使用するメソッド分、追加してます。
- 引数だけで呼び出せるように置き換え
- 戻り値を UniTask にしてコールバックを async で受け取る
ビルド
著者環境
OS : Windows 10 Pro
Unity : Unity 2020.1.0f1
1. Github からプロジェクトチェックアウト
2. Epic Online Services デベロッパーポータルで登録
- 新しいプロダクト作成
- Epic Account Services で 3 項目を全て入力して、Configured にする
- Product Settings の内容を Unity でプロジェクトを開いて
Assets/ScriptableObjects/EOSSettings.asset に記載
3. Glitch でサーバー作成
- eos-lobby を開いて View Sorce -> Remix Edit で自身のアカウントにクローン
- .env にシークレットのキーと値を設定して
- Unity プロジェクトの Assets/ScriptableObjects/EOSSettings.asset に記載
4. Unity ビルド
Windows Standalone でビルド
終わりに
公開できないのは残念です。
EOS は正式リリースされているかのように宣伝されているので、
私のように勘違いして開発している人いそうです。
ロビー検索が動かない件も含めて、公式には早急に対応していただきたいです。