##始めに
今回の記事は完全に理論段階です。
あしからず。
json utilityの問題点
json utilityによる圧縮、解凍を行うと、それだけで90fpsを維持出来なくなります。
( json utilityによるjsonシリアライズ速度を参照)
そこで、伝送する情報を最小限に抑えた上で、シリアライズせずに伝送する手段を考えました。
削れるのは、ゲームオブジェクトそのものに関する情報、と考えました。
コンポーネント及びスクリプトの幾らかも削れるやもしれません。
##リアルタイム性
リアルタイム性を以下のように定義します。
「Aクライアント上で、アバター PがXというアクションをした時、Bクライアント上でも、アバター PがXというアクションをする。」
シリアライズは行いません。
##どのように達成するか
あらかじめ、アクションを記号化します。
つまり、文字aをアクションXに割り当てます。
(aという信号を受け取ったならば、アバター KはXというアクションを行う。)
そして、文字列のみネットワーク送信します。
これにより、伝送された文字列を元に、自クライアントにおいて、他ユーザのアクションを再現出来ます。
(文字列の配列から、アクションの順番の正しさが保証されます。)
前段階として、生成されたユーザn人に番号を振っておき、識別可能とします。
これにより、 jsonの利用はアバター 読み込み時のみとなります。
必要に応じ、アバター 識別番号とアクション文字列をバイナリなどに加工します。
##課題
・nクライアントのnアバター への対応
・ボイスチャットなど、単純なアクションに置換することが難しいものについて、いかにリアルタイム性を保証するか
・文字とアクションの紐付け
・自クライアントにおける他ユーザアバター のアクション制御
・クライアント接続数の把握
・「ポート接続を維持しつつ自分以外の全てのクライアントに文字列を送信」の実現
・gRPCの解析
・magic onionの解析
・nクライアントの状態の取得更新
以上です。
お読み頂きありがとうございました。