予測ミスとエンティティビュー
はじめに
Photon Quantumは予測ロールバックエンジンで、通常はプレイヤーの最後の入力が予測フレームで繰り返され、その予測に基づいてローカルシミュレーションを進行します。
確定フレーム(確定した入力のセット)に到達した際、予測中に進行していたデータは、予測ミスにより変更する必要がある可能性があります。
このようなロールバックが発生すると、特にエンティティの位置などのゲームビューでは目立つことがあります。
加速/減速なしにエンティティのtransformを変更する(つまり位置などを急激に変化する)ような一般的な例を考えてみましょう。以下のgifをご覧ください。
上のエンティティ(最初に動く方)はローカルプレイヤーのエンティティです。
下のエンティティはリモートプレイヤーのエンティティで、ロールバックの影響が目立っています。
 
補足: これは、エンティティの移動を非常に速く誇張させた例です。
ここでは次のようなことが起こっています。
- リモートプレイヤーが右ボタンを押し始めると、エンティティも右に移動し始めます。
- 予測フレーム中、プレイヤー入力が繰り返されるため、リモートプレイヤーのエンティティは右に移動し続けます。
- リモートプレイヤーが右ボタンを離しても、ローカルクライアントはこの変化をまだ認識できないため、エンティティが右に移動していると予測し続けます。
- 次の確定フレームが到着すると、EntityViewは予測ミスした位置から正しい位置へ線形補間(わずかに後退)します。
線形補間は、EntityViewの予測誤差修正設定によって行われます。
備考:上記の例ではエンティティのTransformを直接変更していますが、KCCやPhysicsBodyなど、他のキャラクター移動方法でも、類似の挙動は確認できます。
軽減策
これは予測ロールバックモデルでは避けられない挙動ですが、影響を軽減する方法はいくつかあります。
最も一般的なアドバイスは、以下の2つです(通常は1の方法で十分です)。
- エンティティの移動を、急激に移動させるのではなく、加速/減速を加えてください。わずかな加速/減速だけもかなりの効果があり、予測ミスによる差異は非常に小さくなります。
 
- 入力ディレイを追加してください。予測フレーム数を減らすことで、予測ミス数も減ります。
 
補足: ゲームに大きな悪影響を与えずに使用できると確信できなければ、入力ディレイの使用は避けてください。この代替方法を試す場合は、DeterministicConfigアセットのOffsetMinを小さい値(例:2)に設定して、ゲームの動作を確認することをお勧めします。