アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

UnityとPhotonを使って開発する時のメッセージ数の制限について

2021年3月29日

こんにちは!ジェイです。オンラインゲームを開発する時に使うPhotonCoundにはメッセージ数の制限があります。それが原因で切断が起きたりすることがあるので、今回はそれらについての軽いまとめです。

まずは↑を読んで気づくことがあるかチェック
こういうところが問題になるのかは目を通しておくとよいかと思います。

次に「500 メッセージ/秒 1ルームごと」あとはこれってどういうこと?
メッセージってどうやってみるの?というみなさん思いますよね?

上の記事を参考に実際のメッセージ数を調べて対応するといいでしょう。

また、紛らわしいのが同時接続100ccは1ルームに100人のゲームが作れるわけではないということ。上記の1Room毎秒500メッセージの制限が大きく100人集めようと思えば集められるけど、1秒間に送信できるメッセージは限られます。(限度を超えたRoomは勝手にRoomから切断されていきます)

100人入ったRoomで一人が全員にメッセージを送ると
out 1
in 1 
となりますがRoom全体で考えると1送信、99受信で1回で100msgということになります。 
これで100人分を処理できるゲームならば、問題はないかと思いますが、そうそう上手くはいかないと思います。

また、全員が位置の同期を行うと
out 100
in 99*100
ということになり全プレイヤーの同期はこのメッセージ数ではとても難しいことがわかります。

最終的にはネットワークカリングとかをがんばって、メッセージを減らす努力は必要かと思いますが、どう考えても無理な場合もあるので、後戻りができなくなる前に注意しておくことが必要です。

1ルームの秒間メッセージ数MMは、各プレイヤーの秒間送信メッセージ数SSと、1ルームの参加プレイヤー数NNから、M=SN^2M=SN2

で表せます。これは1ルームの参加プレイヤー数が増えると、ルーム内のメッセージ数が指数関数的に増加することを意味します。そして、この秒間メッセージ数を500以下に抑えるとすると、S \leqq \frac{500}{N^2}SN2500​

を満たすように、各プレイヤーの秒間送信メッセージ数を調整する必要があります。参加プレイヤー数が4人なら、約30回と高速な対戦アクションを作れるだけの十分な余裕がありますが、参加プレイヤー数が10人になると、最大5回でうまく同期する仕組みを考えなければなりません。参加プレイヤー数が20人にもなると、2回で制限をオーバーしてしまうため、様々な通信量削減のテクニックやトリックを駆使しなければ、まともに同期することすら困難になるでしょう。

これは見方を変えれば、各プレイヤーの秒間送信メッセージ数が1回前後で同期できるゲームなら、参加プレイヤー数が20人以上でも動かせるということでもあります。例えば、ターンベースのリアルタイム性が低いゲームなどで、大人数オンラインゲーム開発にチャレンジしてみても良いかもしれません。

0