LoginSignup
3
1

More than 3 years have passed since last update.

VRMMOゲーム開発:リアルタイム通信

Last updated at Posted at 2019-07-30

如何にして90fpsを達成するか

VRMMOにおいてはリアルタイム性が重視されます。
ボイスチャット然り、動作反映然り。
その指標となる、90fpsの達成方法について考察します。
90回通信/秒より、一回の所要時間は10^-2程度、同時接続1000人とすると、負荷を考慮して1000で割って、10^-5の通信速度が求められます。

jsonデータ

ゲームオブジェクトは、何らかの値を常時持っており、更新されます。これを、クライアント間で共有せねばなりません。
その為には、ゲームオブジェクトを識別可能として、値を文字列に変換する事が要と思われます。
構造化データ形式は限られており、unityの基本はゲームオブジェクト。そこで、ゲームオブジェクトの json化をします。 json utilityを用います。(他の方法が思いつきませんでした)
また、mysqlが jsonをサポートしている事もあります。

通信

同期というのは恐らく手間がかかります。通信速度に影響します。
そこで、同期をやめます。
何かというと、ソケット通信時、c++ 変数に 文字列jsonを指定し、都度新しい jsonを丸ごと代入してあげます。これで、予想が正しければ、解析の時間が無くなります。その後、新しい jsonを、自分以外のポートに伝送します。(やり方はまだ分かりません)
プロトコルは、正確さが求められる場合はTCP、速さが求められる場合はUDPを用います。独自プロトコルについては、検討します。

大事なこと

全体としての手続きを簡略化する事が重要です。速さと正確さの担保となります。
クライアント、サーバ双方で、常に何らかの処理をさせる、遊ばせない、これを重視したく思います。

最後に

当方、超がつくほどの初心者です。
結局、根本にあるのは、unityはc++ で出来ているし、c++ はcの発展系だから、何とかなるだろうという考えです。ビジョンが先にあって、エンジンやプログラミング言語を用いて調節、最適化しながら、目標を目指します。

当方、unity、c、c++ 、c#について全くの初心者です。これから勉強してゆきます。

追記

magic onionも検討中です。オープンソースライブラリということで、後でgithubにて確認します。

3
1
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
3
1