UNET Network Simulatorを使って、遅延をシミュレーションする

ネットワークゲームを作る際は、ネットワークによる情報伝達の遅延やパケットロスを必ず考慮する必要があります。それをサポートする機能であるNetwork Simulatorの使い方を解説します。

※インターネット接続の場合です。LAN接続前提の場合はそこまで神経質にならなくても大抵問題ありません

遅延の問題

ネットワークゲームにおいて、遅延が無ければ本当に最高です。もし遅延の全くない通信技法が生まれれば、プレイヤーもハッピーでしょうが、おそらくもっとハッピーなのは開発者です。嬉ションするレベルです。

でも、現実にはそれは無理で、情報伝達には必ず時間がかかります。光の速度でも地球の裏側までいくには結構時間がかかること、ネットワークの間に大量の機器が介在することなどが理由です。

遅延は必ず存在するということを考慮してゲームを開発しないと、実際のプレイ中に大きめの遅延が発生した時、プレイ感が大きく損なわれるか、最悪の場合、ゲームが破綻します。

でも、開発中は自分のPC1台で動作確認したり、PC2台をLANで繋いだりして動作確認したりすることが多いでしょう。つまり遅延のほとんど発生しない環境での動作確認です。それでは、遅延のある状況でも正しく動作するかの確認ができません。

Network Simulator

そこで、Network Simulatorの出番です。これを使えば、PC1台でも、遅延のある通信を再現できます。

使い方は簡単です。

Network Managerの Use Network Simulator をオンにします。

f:id:motoyamablog:20180129110402p:plain

Simulated Average Latencyは、平均遅延時間(ミリ秒)です。ここで指定した時間だけ、通信が遅れて届きます。
どの程度の遅延まで許容するかはゲーム次第です。とんでもなく大きな遅延はプレイヤー側の責任ということで、プレイ感の悪い状態で我慢してプレイしてもらうか、もしくはキック(サーバーから追い出す)で良いと思いますが、あまり厳しくしても、プレイヤーが減ってしまいます。難しい問題です。一般的には、100~200ミリ秒程度の遅延はあってもゲームが動くように作るのが好ましいようです。

Simulated Packet Lossは、パケットロスする確率です。
インターネットの通信は、相手に確実に届く保証は無く、届かないときも普通にあります。これをパケットロスと言います。普通にインターネットを見たりメールをしたりするときは、TCP/IPという、相手に届くまで何度も再送する通信方式を使っているから安心なのですが、UNET(および多くのネットワークゲーム)では、UDPという速さを優先した通信方式を採用しており、情報が相手に届かない可能性があります。パケットロスを考慮してゲームを作らないと、大事な情報が伝達されずに、最悪の場合、ゲームが破綻します。
例えばパケットロスのせいで、ダメージが相手に伝わらない!とかは最悪ですが、ゲーム開始の合図がサーバーから送られてくる途中にパケットロスしてしまい、自分だけいつまで経ってもゲームが始まらない!とかはもっと最悪ですね。こういうことが無いように、ロスしたら困る情報は信頼性の高いChannelで送信する必要があるのですが(やり方はこちら)、それが正しく実装できているかを確認するために、Simulated Packet Lossを設定しましょう。

Network Simulatorを使うには、ビルド時にDevelopment Buildをオンにする必要があるので忘れないでください。

f:id:motoyamablog:20180129112126p:plain

あとは、実行ファイルをビルドして、普通に動作確認するだけです。

↓Network Simulatorオフの状態。ほとんど遅延していません。

f:id:motoyamablog:20180129112502g:plain

↓Network Simulatorオンの状態。遅延しています。

f:id:motoyamablog:20180129112539g:plain

 

以上のように、Network Simulatorを使うことで、PC1台でも通信の遅延を再現できます。これを利用して、遅延があっても快適にプレイできるネットワークゲームを開発してください。

 

目次へ