Unityのネットワークエンジン選定
未整理
素朴なリアルタイムネトゲだったらPlayfab gSDKのサーバ+MirrorとかHLAPI over unity transportとか好きに選ぶ感じで…
— izm (@izm) August 25, 2020
Google Cloud Game ServersはGKE+agonesなので、UnityのDedicated Serverを仕立てて動かすにはこの辺のを読むと良いのかなhttps://t.co/D5xPoCTajB
— izm (@izm) August 25, 2020
ネットワークゲームのトポロジー
P2P
クライアント同士が通信
開発がサーバーを用意しなくていい
❌ チートに弱い、大人数接続に弱い
Dedicated Game Server(DGS)
専用ゲームサーバーを建てる方式
ロジックを持つ
❌ サーバーの容易が必要
P2P v.s. Dedicated Server?
基本的にDedicated Server
前提の未来予測
クラスプラットフォームMatch Makingが普通になる
クラウドの発展でサーバーの問題は解決される
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現 – Unity Learning Materials p.13
P2Pのほうが明らかにいい場合はその限りではない
Unity のマルチプレイヤー Netcode の移行ガイド - Unity Technologies Blog(2020年4月27日)
Unity公式の意思決定フローチャート。素人が読んでもよく分かるように書かれている。
https://gyazo.com/ece35e74b553ff9e8a64df083b20fcb9
大人数のゲーム(25人以上同時参加)ではP2Pトポロジーは使えないので、以下の2択
1. DOTS-Netcode stack(Q2 2021+以降リリースなら)
2. DGS networking stackを自作する
許容レイテンシも200ms未満にするためなら
一部のモバイルデバイス向けシューティングゲームは、最大 200-250 ミリ秒のレイテンシーが許容されます。指入力の精度に限界があるため、そもそものゲームのペースを若干遅くする必要があるからです。このような場合、チートの可能性が低くてプレイヤー数のスケール(規模)が小さいゲームであれば、UNet LLAPI とサードパーティ製の Relay(Photon や Steam など)で事足りることもあります。
チートは、右側がリレー方式(HOSTがプレイヤー)だからっぽい
【Unite Tokyo 2019】Unity Connected Gamesの現在と未来
リアルタイムな多人数参加型ゲームを民主化するUnityはUnetを廃止しconnected gamesに以降
マルチプレイヤーコネクティッドゲームへの第一歩 - Unity Technologies Blog
すべてのタイプのゲームにおいて理想的な唯一のソリューションというものは存在しない。したがって Unity は、FPS、リアルタイムストラテジー、格闘ゲームなど、それぞれのタイプのゲームで使用されている一般的なネットワーク・アーキタイプに対して、別々のソリューションを作成する。
まず最初に、FPS ゲームで一般的に使用されるクライアント側予測モデルに焦点を合わせて取り組む。
Unityでオンラインマルチプレイなゲームを作りたい その1 ネットワークエンジンの選択 - Qiita
UNet
DGS
Connected games
Strix Unity SDK
2018年現在におけるUnity向けリアルタイムネットワークエンジン選定について – Unity Learning Materials
クライアントがHOSTとして振る舞うゲーム想定(リレー方式)
ネットワークライブラリ + ゲームで使う機能
リアルタイムネットゲームで使う機能(重要度順)
Lobby Matchmaking
ルームを立ててメンバーを集めるためのロビーサーバをたてる
RPC
SyncVar
Network Transform
Network Instanciate
Network Destroy
Unityにおけるネットワークライブラリ
NetworkView(Unity 4以前~)
Photon Unity Networking(v1)←2018年におけるizmさんのおすすめ
作りが古い
RCPの指定が文字列わたし、など
UNet類似のAPIらしい
でもちゃんと動くしコミュニティもある
不適な用途
超多人数、遠隔地のサーバ
リレーサーバの通信量課金前提。LAN完結は事実上使えない(ライセンスが高い)
UNet(Unity 5.1)
UDPベースのLLAPI(low level API) + HLAPI(high level API)
闇も多いらしい(結局自前で再送処理を書く)
バグが治らない、学習リソースが貧弱
レイテンシ1秒以上
Monobit Engine
Photon v2
2018.8ごろ~
v1と互換性なし
RCPの指定が文字列わたしは変わってないらしい
Mirror←LANの場合におすすめ
UNET + Bugfix + 安定化 + パフォーマンス改善 + TCP - マッチメイク - リレーサーバ - UDPベースのLLAPI
製作者がuMMORPGの作者
https://youtu.be/4v19qbotsrk
Unity Transport Packageが今後の標準
DOTSにも対応
が、プレビュー
LiteNetLibを使った
TCP/UDP?
Bolt
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現 – Unity Learning Materials p.13 (2020年1月27日)
table:_
Solution 備考
connected games リリース時期伸びるかも。出たら検討
Photon Unity Networking(Photon Engine) izmさん(2018年)おすすめ。やや構成が古めかしくホスティング/モニタリングが面倒らしい
Photon v2
Monobit Engine Photonとほぼ同様。.NET Coreでホスティングするので取り回しが良いらしい
WebSkcket + Server App UnityのクライアントSDKはない
WebSocket + mBaaS GameLift PlayFabにはSDKがある場合があり、Photonに利用イメージが近い
TCP/UDP + Server App(MagicOnionとか)
TCP/UDP + Unity Headless(サーバー実装をUnity)