内挿と外挿
ネットワークオブジェクトの同期管理は、マルチプレイゲーム作成にあたり1つの問題となります。
顕著な問題の1つにラグ
があります。これは言い換えると、一人のプレイヤーのアップデートが他のプレイヤーに到達するまでの時間のことで、キャラクターの動作にずれが生じたり、極端な場合には「テレポート」が起きたりします。
そのようなケースを軽減するため、Photon Boltではできる限りゲーム画面でラグ
を感じさせないための2つの戦略を搭載しています。
(i) 内挿 (内挿スナップショット) と (ii) 外挿 (デッドレコニング)です。
内挿と外挿は基本的には同じ効果をもたらします。その効果とは、リモートプレイヤーのキャラクターが画面上で滑らかに動作するようにすることです。
これを、内挿と外挿では全く異なるアプローチで行います。
Boltには、エンティティの状態の特定のプロパティの種類についてこれらのアルゴリズムのサポートがあります。多くの場合、位置情報や回転情報を同期するのに使用します。以下を参照してください。
プロパティのタイプ | 内挿 | 外挿 |
---|---|---|
Array | ||
Float | ||
Quaternion | ||
Vector | ||
Transform |
内挿
内挿スナップショット(Interpolated Snapshots)
(IS)とも呼ばれており、単純明快な原則にのっとっています。2つの古い、既知の位置の間をとってキャラクターを移動させることで作用します。
これを達成するため、受信したデータ(エンティティの位置と回転を表すデータなど)の限られた過去の配列を管理します。これは現在の値と前回の値の間のスムーズな移動に使用します。
この技術を使用してエンティティのTransform
プロパティを同期する場合、ほとんどのケースに存在するgainが各プレイヤーのゲーム画面の非常に正確な表現となります。通常どおり、レンダリングされるのはリモートオブジェクトの既知の位置のみで、時折エンティティがその位置に動かされることもあります。
内挿のデメリットは、プリセットの値によってオブジェクトのレンダリングの 遅延 を要する点です。これはクライアントに表示されるオブジェクトは最新の値を反映して いない ためです。つまり、プレイヤーが常に本当のゲームの状態から後れを取っているということになります(その差が小さいものだとしても)。lerp
を適切に実行するのに必要な挙動です。
また、各クライアントで各エンティティに対してこのアルゴリズムを実行する必要があるため、注意して使用するようにしてください。
外挿
外挿は、非予測的な状態アップデートの知覚を減少させるための、また別のアプローチです。時としてデッドレコニング
(DR)とも呼ばれるこの方法は、ゲームオブジェクトの、分かっている最後の位置、回転、速さをとり、それを見ることでエンティティがどこに行こうとしているのか予測します。
プレイヤーが3フレームごとにパケットを送信する場合、そのパケットにはオブジェクトの位置、回転、速さが含まれ、Boltの外挿アルゴリズムは、新しい情報が到達するまでの次の3フレームの間、そのオブジェクトがいる位置を推定できるようになります。
この場合の需要な要因は、3つ目のフレームに外挿を行い、新しいパケットが届かなかったとき、同じアルゴリズムを使用して推定することが可能ということです。推定する時間が長くなればなるほど間違う確率も高くなりますが、 DR のアルゴリズムは射影速度融合を用いて本当データが届いたときに訂正します。
外挿を行うメリットはパケットに人工的な遅延を行わなくてよい点です。必要だとしてもほんの少しなので、ゲームがプレイヤーにより速くレンダリングできるようになり、内挿として同じタイプの人工的な ラグ を導入しません。
(明確なエンティティの位置、回転、速度についての情報がない)紛失したりスキップしたパケットを透過的に処理するため、プレイヤー数の多いゲームを扱う場合などにとても便利です。
DR のデメリットは、IS ほど正確ではなく、オーソリテーティブや ラグ 補正済のシューティングを行うFPSゲームなどには使いづらい点です。外挿の推定的な性質から、各プレイヤーの画面上で物事の見え方が異なってしまい、さらに内挿値を使用していた場合、垂直方向に向かってくるプレイヤーに向かって真っすぐ狙いを定めていたとしても一撃逃してしまいかねません。
スムージングアルゴリズムを選択する
Boltエンティティステートの新しいプロパティを作成する場合、プロパティの種類 ( こちらのリスト)によってスムージングアルゴリズムを選択できます。:
内挿
オプションを選択する場合、必要な追加の設定はありません。Boltがアルゴリズムを実行します。ただし、Extrapolation
技術を使用する場合、ゲームのニーズに応じてパラメータが変更される可能性があります。以下を参照してください。
- 外挿の速度: これは、ゲームオブジェクトの速度がゲッタされたり計算されるところから選択します。: (i) 位置の差異から計算 するか、 (ii) Rigidbodyからコピー するか、(iii) Rigidbody2Dからコピー するか、(iv) CharacterControllerコンポーネントからコピー します。
- 外挿の設定: 推定と、予測値と実際値の間のエラー許容範囲のため将来のフレームの最大数を設定します。