誤予測とエンティティビュー
はじめに
Photon Quantumは予測ロールバックエンジンであり、プレイヤーの最後の入力が通常、予測フレーム中に繰り返されて、ローカルシミュレーションがそのような予測に基づいて進行します。
検証された入力セットを持つ検証フレームが到着すると、予測中に進行したデータは誤予測の可能性により変更が必要になる場合があります。
この種のロールバックは、特にエンティティの位置において、ゲームビューで目立つことがあります。
一般的な例として、エンティティの変形を加速度や減速なしで変更した場合、すなわちその位置が突然変わる場合が挙げられます。以下のGIFをご覧ください:
上部のエンティティは、最初に移動するローカルプレイヤーのエンティティです。
下部のエンティティはリモートプレイヤーによって制御されており、ロールバックが顕著に見られます。
![Mispredictions and Entity Views](/docs/img/quantum/v3/concepts-and-patterns/entity-view-rollback.gif)
備考: これは、エンティティが非常に速く移動する誇張された例です。
起こることは次のとおりです:
- リモートプレイヤーが
右矢印
ボタンを押し始め、エンティティが右に移動します。 - 予測フレーム中、そのプレイヤー入力が繰り返されるため、リモートプレイヤーのエンティティは右に移動し続けます。
- リモートプレイヤーは
右矢印
ボタンを押すのをやめますが、ローカルクライアントはまだこの変更を認識していないため、エンティティが右に移動していると予測し続けます。 - 次の検証されたフレームが到着すると、
EntityView
は誤予測された位置から正しい位置まで、わずかに後ろに移動しながら線形補間(lerp)します。
線形補間(lerping)は、エンティティビューのエラー予測設定によって行われます。
注意: 上記の例ではエンティティのTransformに直接変更を加えていますが、KCCやPhysicsBodyなど、他のキャラクターの移動ソリューションでも類似の挙動が観察されます。
軽減策
これは予測ロールバックモデルでは予期されることですが、影響を軽減する方法はいくつかあります。
以下は最も一般的なアドバイスの2つです(1番目の方法が通常は十分です):
- エンティティの移動に加速度と減速を加え、常に突然移動させるのではなく、滑らかに移動するようにします。少しの(加減速)があれば、誤予測による差異ははるかに小さくなり、大いに助けになります。
![Mispredictions and Entity Views](/docs/img/quantum/v3/concepts-and-patterns/misprediction-with-acceleration.gif)
- Add a little bit of Input Delay as it reduces the amount of predicted frames and thus reduces the amount of mispredictions;
![Mispredictions and Entity Views](/docs/img/quantum/v3/concepts-and-patterns/misprediction-with-input-delay.gif)
備考: Input Delay の変更は、ゲームに重大な欠点なく本当に使用できると確信していない限り、避けてください。
この代替案を試してみることに決めた場合は、DeterministicConfig
アセットに移動し、OffsetMin
を小さな値(例えば2
)に設定して、ゲームの動作を確認することをお勧めします。