コマンド

コマンドはサーバーの権威を使用してクライアント予測をサポートするためのBoltの任意の構造です。

予測

ローカルのエンティティ(通常はプレイヤー)は常に予測されています。ローカルマシン上で瞬時に移動するのに、コマンドシステムを用いています。プレイヤーにとって即座に応答があることはとても大切なことです。プレイヤーの入力はコマンドの一部としてサーバーに送信され、サーバーは特定のフレームの結果(最終的な位置、速度など)を、プレイヤーに返します。するとプレイヤーは、基本的に位置やその他の情報をそのフレームのサーバーの情報に合わせてリセットします。(コマンドの結果の「訂正」)そこから現在までの入力を再生して、そこであるだろうと予測していた場所に戻ります。

Back To Top

権威性

サーバーのシミュレーションがずれると、プレイヤーの位置もずれてしまいます。シミュレーションがサーバーで間違いなく動作すれば、プレイヤーはそのシミュレーションの結果を予測するだけで済みます。プレイヤーが高速で動くように設定しても、クライアントシミュレーションはサーバー上で意味を持たないので、サーバーには影響がありません。

Back To Top

コマンドの仕組み

SimulateController()はゲームからの入力を回収してコマンドに送るのに使用されます。SimulateControllerは、フレームごとに1回実行されます。

ExecuteCommand()はエンティティの所有者および管理者の両方で動作します。サーバーがスポーンするプレイヤーキャラクターが存在して、クライアントにその制御を任せる場合、ExecuteCommandが動作するのはサーバーと制御するクライアント両方ということになります。その他のクライアントでは動作しません。

entity.QueueInput(cmd);を呼び出すと、コマンドはクライアント上でのローカル実行とリモート実行の両方が予定され、リモート実行用にサーバーに送信されます。コマンドがサーバーとクライアントの両方で実行されることで、Boltのクライアント側予測が可能になります。

コマンドの実行時、サーバ-はコマンドを作成したクライアントにその状態を送信し、当クライアントの特定のコマンドの状態を、正しいものにオーバーライドします。

resetStateパラメータは、resetStateがtrueの場合に、コマンドがパスされたときの状態へCharacterMotorの状態のリセットを要求します。これはリモートで制御しているクライアントのみで起こり、サーバー上では起こりません。各フレームの始まりで一度発生し、パスされたコマンドはサーバーから正しい状態を受信したものとなります。

resetStateを含むコマンドが実行されると、Boltはクライアント上で他のコマンドを、リセットフレームのフレームから現在のフレームへ再度実行し、現在の状態に「追いつく」ようにします。これは全てのフレームで同じように起こります。(これがシミュレーション速度です。)

よくある質問で、「どうしてプレイヤーのリセットステートロジックをクライアント上でコメントアウトするとプレイヤーの速度が非常に速くなるのか」というものがあります。 これは、全ての瞬間においてBoltが、プレイヤーを特定のフレーム上で元いた位置に(リセットステートを用いて)巻き戻すからです。ほとんどのシナリオでは、新しい操作による追加の入力が加えられた上で、操作する前と同じ位置に戻ります。 通常再生される入力は、同じネットワーク上のサーバーでのプレイ中だとしても、少なくとも10以上のコマンドです。リセットステートロジックをコメントアウトすると、Boltはプレイヤーの位置をはじめに戻すことなく10以上のコマンドを(「前へ進む」操作をした場合は、これに「前へ進む」という入力が加わって)実行することになります。つまり、操作ごとに10以上のコマンドと「前へ進む」を実行するだけになります。このため動きが速くなるのです。ただこれは完全にクライアントサイドの現象で、サーバー側ではこの俊敏な動きは反映されていないので注意ください。サーバーとの連携はとれていないことになります。

Back To Top

概要

コマンドエディター

Back To Top

プロパティ

  • Is Instant - コマンドのキュー登録された全ての入力は、サーバーに到達するとすぐに次のフレームで実行されます。
  • Enable Frame Limit - SimulateController() ごとにキュー登録できるの入力は1つのみです。この制限によってスピードハックを防ぐことになります。
  • Correction Interpolation - サーバーから受信した結果の補間
  • Enable Delta Compression - わずかに上昇した処理時間の代償でネットワークのトラフィックと割り当てを削減します。常に結果を確認するようにしてください。入力/出力には、ブール型のみを使用すると差分圧縮されないので注意してください。(ブール型のみにしないようにしてください。)

ドキュメントのトップへ戻る