予測ミスとエンティティビュー
はじめに
Photon Quantumは予測/ロールバックエンジンで、通常はプレイヤーの最後の入力が予測フレームで繰り返され、その予測に基づいてローカルシミュレーションを進行します。
確定フレーム(確定した入力のセット)に到達した際、予測中に進行していたデータは、予測ミスにより変更する必要がある可能性があります。
このようなロールバックが発生すると、特にエンティティの位置などのゲームビューでは目立つことがあります。
加速/減速なしにエンティティのtransform
を変更する(つまり位置などを急激に変化する)ような一般的な例を考えてみましょう。以下のgifをご覧ください。
上のエンティティ(最初に動く方)はローカルプレイヤーのエンティティです。
下のエンティティはリモートプレイヤーのエンティティで、ロールバックの影響が目立っています。

補足: これは、エンティティの移動を非常に速く誇張させた例です。
ここでは次のようなことが起こっています。
- リモートプレイヤーが右ボタンを押し始めると、エンティティも右に移動し始めます。
- 予測フレーム中、プレイヤー入力が繰り返されるため、リモートプレイヤーのエンティティは右に移動し続けます。
- リモートプレイヤーが右ボタンを離しても、ローカルクライアントはこの変化をまだ認識できないため、エンティティが右に移動していると予測し続けます。
- 次の確定フレームが到着すると、
EntityView
は予測ミスした位置から正しい位置へ線形補間(わずかに後退)します。
線形補間は、EntityView
の予測誤差修正設定によって行われます。
備考:上記の例ではエンティティのTransform
を直接変更していますが、KCCやPhysicsBody
など、他のキャラクター移動方法でも、類似の挙動は確認できます。
軽減策
これは予測/ロールバックモデルでは避けられない挙動ですが、影響を軽減する方法はいくつかあります。
最も一般的なアドバイスは、以下の2つです(通常は1の方法で十分です)。
- エンティティの移動を、急激に移動させるのではなく、加速/減速を加えてください。わずかな加速/減速だけもかなりの効果があり、予測ミスによる差異は非常に小さくなります。

- 入力ディレイを追加してください。予測フレーム数を減らすことで、予測ミス数も減ります。

補足: ゲームに大きな悪影響を与えずに使用できると確信できなければ、入力ディレイの使用は避けてください。この代替方法を試す場合は、DeterministicConfig
アセットのOffsetMin
を小さい値(例:2
)に設定して、ゲームの動作を確認することをお勧めします。