simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity:リアルタイム通信ゲームのひな形

最近書いたQiita記事
qiita.com

実際 Unity でリアルタイム通信ゲームを作ろうと思った時に、脳内で走ったシミュレーションをここに書き出してみます。

ある一人がルームを作成している状態
もう一人がルーム一覧を知る術はあるか→知らない

ルーム名を固定したときに、すでに入っている人のアバター情報を取得する方法はあるか→知らない

誰かがルームに入ってきたことはわかる→既存のメンバーがその新規メンバーに情報をその後に渡せばよいだろう
特定メンバーにだけ送信できるのか→なかった、guid で除外するメンバーを指定できる
StreamingHubBase.Context にContextId があり、ここの値を使う
Room の Group に AddAsync するときにデータを載せられるらしい?次の関数を使えば
ValueTask<(IGroup, IInMemoryStorage)> AddAsync(string groupName, TStorage data) where TStorage : class;
であるならば、Group からリストを取り出して、対象の guid 以外を except することも可能か…

各種入力値を通信で渡すようにすれば、通信量は小さい
定期的に絶対値などのステータスを同期する、5秒に1回とか

ルーム名一覧は別途Lambdaなどの別の WebAPI で取得できれば良い
別の方法にすればパスワードでルームを保護することも自由だし、一覧に情報を付加しやすい

アプリケーションを強制終了させたり、ルームメンバーが消えた時などはどうする?
→アプリ終了時に Disconnect する直前にルームを退出できる

退出と入出ごとにルーム情報を更新できればいける

いろいろ、答えは README に書いてあった
github.com

読む、理解するで疑問は解決できた