Unityのネットワークエンジン選定
未整理
素朴なリアルタイムネトゲだったらPlayfab gSDKのサーバ+MirrorとかHLAPI over unity transportとか好きに選ぶ感じで…
ネットワークゲームのトポロジー
P2P
クライアント同士が通信
開発がサーバーを用意しなくていい
❌ チートに弱い、大人数接続に弱い
Dedicated Game Server(DGS)
専用ゲームサーバーを建てる方式
ロジックを持つ
❌ サーバーの容易が必要
P2P v.s. Dedicated Server?
基本的にDedicated Server
前提の未来予測
クラウドの発展でサーバーの問題は解決される
P2Pのほうが明らかにいい場合はその限りではない
Unity公式の意思決定フローチャート。素人が読んでもよく分かるように書かれている。
https://gyazo.com/ece35e74b553ff9e8a64df083b20fcb9
大人数のゲーム(25人以上同時参加)ではP2Pトポロジーは使えないので、以下の2択
2. DGS networking stackを自作する
許容レイテンシも200ms未満にするためなら
一部のモバイルデバイス向けシューティングゲームは、最大 200-250 ミリ秒のレイテンシーが許容されます。指入力の精度に限界があるため、そもそものゲームのペースを若干遅くする必要があるからです。このような場合、チートの可能性が低くてプレイヤー数のスケール(規模)が小さいゲームであれば、UNet LLAPI とサードパーティ製の Relay(Photon や Steam など)で事足りることもあります。 チートは、右側がリレー方式(HOSTがプレイヤー)だからっぽい
すべてのタイプのゲームにおいて理想的な唯一のソリューションというものは存在しない。したがって Unity は、FPS、リアルタイムストラテジー、格闘ゲームなど、それぞれのタイプのゲームで使用されている一般的なネットワーク・アーキタイプに対して、別々のソリューションを作成する。
まず最初に、FPS ゲームで一般的に使用されるクライアント側予測モデルに焦点を合わせて取り組む。
DGS
Strix Unity SDK
クライアントがHOSTとして振る舞うゲーム想定(リレー方式)
ネットワークライブラリ + ゲームで使う機能
リアルタイムネットゲームで使う機能(重要度順)
Lobby Matchmaking
ルームを立ててメンバーを集めるためのロビーサーバをたてる
RPC
SyncVar
Network Transform
Network Instanciate
Network Destroy
Unityにおけるネットワークライブラリ
NetworkView(Unity 4以前~)
作りが古い
RCPの指定が文字列わたし、など
でもちゃんと動くしコミュニティもある
不適な用途
超多人数、遠隔地のサーバ
リレーサーバの通信量課金前提。LAN完結は事実上使えない(ライセンスが高い)
UDPベースのLLAPI(low level API) + HLAPI(high level API) 闇も多いらしい(結局自前で再送処理を書く)
バグが治らない、学習リソースが貧弱
レイテンシ1秒以上
Monobit Engine
2018.8ごろ~
v1と互換性なし
UNET + Bugfix + 安定化 + パフォーマンス改善 + TCP - マッチメイク - リレーサーバ - UDPベースのLLAPI
https://youtu.be/4v19qbotsrk
Unity Transport Packageが今後の標準
が、プレビュー
TCP/UDP?
table:_
Solution 備考
WebSkcket + Server App UnityのクライアントSDKはない
WebSocket + mBaaS GameLift PlayFabにはSDKがある場合があり、Photonに利用イメージが近い
TCP/UDP + Unity Headless(サーバー実装をUnity)