調査1
- Unity 標準のネットワークライブラリ開発を待つべき?いつ開発が終わるかわからないが
- MagicOnion
- .NET 5.0+ / .NET Core 3.1
- Unity公式でWebRTCのパッケージがある
- goなのでサーバー選定に制約
- 1ルーム2名とあるが、用途として十分
- SkyWay https://webrtc.ecl.ntt.com/
- URLにある通り、NTTのサービス
- 無料サーバー
- 接続回数 50万回/月まで
- 1対戦毎に切断するならこっちがネックになりそう
- 10分に1回×8時間×土日×4週=384なので、月1300人ぐらい
- シグナリングサーバーとの接続回数の可能性
- 接続を維持する実装が必要
- ロビーからのデュエルは報酬画面後にロビーに戻る
- 1時間連続して遊ぶ×8回×土日×4週=64なので、月7800人ぐらい
- サーバ通信量(※) 500GB/月まで
- TURN がある
- Android/iOS/JavaScriptはSDKがある
- Unityについては明言はあるものの実装が分からない
- ダウンロードにwindows用バイナリがある。
- 実行後待機状態になる。port 8000 とあるので、これが WebRTC Gateway らしい
- ということは、Unity
とは別に起動しておくプログラムのようだ。よってAndroidはAndroidでSDKを使うし、Windows向けは別途配布が必要
- 実行ファイルに引数はなく、実行ファイルと同じ並びに設定ファイルを置くことで変更
- https://github.com/skyway/skyway-webrtc-gateway/blob/master/samples/util.rb
にあるように、/peers
にJSONでAPIキー等を渡すと開始
- 出来そうだが、いずれにしても保留
- 結果的にAndroid/iOS/Web の相互接続のみ対応するならこれでもいい
- Azure
- App Service
- 他と違って VM は無さそう
- 上記 MagicOnion を使うなら
- Unity+MagicOnionのサンプルプログラムをコンテナ化してAzureContainerInstancesで簡単に動かす方法 https://qiita.com/_y_minami/items/aa57873bbb9ea0b36dd2
- Dockerを含むので冗長
- 上記 OpenAyame を使うなら
- VM がないので無料は不可
- Azure SDK for Go https://docs.microsoft.com/ja-jp/azure/developer/go/
- 1.8 以上と互換性、とある
- バージョン指定はコードの修正が必要かも https://github.com/Azure/azure-sdk-for-go/#versioning
- AWS
- 常に無料、にチェック
- Amazon EC2 は候補に出てこない
- 12か月間無料(手続き必要)
- Amazon EC2 は月ごとに750時間稼働が無料
- 上記 MagicOnion を使うなら
- Amazon Linux 2 上に .NET 5 と MagicOnion を使ったゲームサーバー開発環境作ってみた https://dev.classmethod.jp/articles/create-dev-env-for-dotnet-5-and-magiconion-on-amazon-linux-2-ec2/
- Amazon EC2 を使う
- 上記 OpenAyame を使うなら
- AWS SDK for Go https://aws.amazon.com/jp/sdk-for-go/
- Amazon Elastic Compute Cloud(Amazon EC2) を使うらしい
- go は 1.15なので要件を満たす
- → 結果、無料で続ける事は出来なそう
- GCP
Unityが協力しているので親和性はありそう
Openとあるように、他のクラウドでも動かせる可能性
k8s上にセットアップ
無料枠は $74 。最初のうちは使い切る事は無さそう
PlayFabと比較すると、Unityプラグインがないようだ https://github.com/googleforgames/open-match/issues/1221
自力実装の部分が多いのはつらい
- 上記 MagicOnion を使うなら
- .Net Core 3.1で作る
- Visual Studio の拡張がある。2019も対応
- Compute Engine https://cloud.google.com/compute/docs?hl=ja
- チュートリアルだと .Net Framework を選ぶ、とある点が気になる。
- 上記 OpenAyame を使うなら
- App Engine
- go の推奨バージョンは1.15となっているが、App Engineは1.12なので見送り
- Compute Engine
- PlayFab https://playfab.com/
- Azure上のサービス
- 開発モードである間は無料。デフォルト
- 10万ユーザーまで
- チャットとデータ通信とある
- Free だと「PlayFab Party Connectivity andVoiceの合計最大10,000分が含まれます。」とある
- Unityプラグイン https://docs.microsoft.com/ja-jp/gaming/playfab/features/multiplayer/networking/party-unity-plugin-quickstart
- Win10およびXBoxのみ
- 直接接続をしたらカウントされない
- 接続できなかったら自動的にサーバー経由になる
- これそのまま使えそう
- Androidだとマイク許可が必要とある。
- コード修正で無効化できる
- プレビュー
- マルチプレイヤーサーバー
- サーバーサイドの処理が必要な時
- 最大750時間の無料コンピューティング時間でのホスティング
- 地域が 米国東部、北ヨーロッパ しかない。
- 無料の場合の可能性
- クイックスタート: Unity の PlayFab クライアントライブラリ (C#) https://docs.microsoft.com/ja-jp/gaming/playfab/sdks/unity3d/quickstart
- →ユーザーデータ管理だけ使うのもアリでは
- gamelift https://aws.amazon.com/jp/gamelift/
- AWS上のサービス
- AWS と同じく12か月制限
- GCP上のサービス
- Kubernetes を使う
- 料金は Kubernetes も含め無料範囲内
- Dockerを使うなら、GCPの単独で十分
- →サーバー側を自分で書く場合なら使ってもよさそう
- Unity プロジェクトに Firebase を追加する https://firebase.google.com/docs/unity/setup?hl=ja
- データ永続化だけ任せるなら