サーバー依存のマルチプレイヤー Unity3D ゲームがあり、サーバーは Node.js で記述されています。サーバーはプレーヤーの位置に更新を送信し、プレーヤーはクライアント上のそれらの位置にラープして、スムーズな動きをシミュレートします。プレイヤーの動きに Unity の物理演算を使用していません。1 秒あたり約 20 パケットの更新を取得するので、各更新間の時間を 0.12 秒の lerp 間隔で割った値を使用します。
プレーヤーの動きの lerping の deltaTime を計算するために使用するコードは次のとおりです。
lerpValue = Mathf.Clamp01((DateTime.UtcNow.Millisecond - lastPacket.UpdateTime) / 120;
myTransform.position = Vector3.Lerp (myTransform.position, lastPacket.Pos, lerpValue);
これはプレイヤーの動きを滑らかにしているように見えますが、カメラを一貫してスムーズにプレイヤーに追従させることはできません。カメラのスムージングには、LateUpdate で Time.deltaTime を使用します。これにより、途切れたり、ぎくしゃくしたり、途切れたりします。また、カメラがプレーヤーの少し後ろにくるようにしたいので、プレーヤーの動きが途切れてもカメラは動きません。
VSync のオンとオフを切り替えたり、プレイヤーの動きを FixedUpdate に移動したり、カメラを LateUpdate から FixedUpdate に移動したりして、さらに提案を探しています。