【发布时间】:2018-05-11 11:24:17
【问题描述】:
我正在尝试为客户端模拟刚体实施网络校正。每秒 30 次我得到目标旋转,我从中计算旋转校正。然后我在多个帧上应用此校正。
网络更新:
rotationCorrection = receivedRotation * Quaternion.Inverse(transform.rotation);
每一帧:
var a = Mathf.Min(1, Time.deltaTime * 8);
var final = Quaternion.Slerp(transform.rotation, transform.rotation * rotationCorrection, a);
var actualCorrection = final * Quaternion.Inverse(transform.rotation);
rotationCorrection *= Quaternion.Inverse(actualCorrection);
//rotationCorrection = Quaternion.Slerp(rotationCorrection, Quaternion.identity, a); // First try
_rigidbody.MoveRotation(final);
我不只是将当前旋转插值到更正的原因是游戏对象包含一个刚体,除了更正之外,它还应该模拟对象。
这有时确实有效(至少是第一次尝试版本),除了大约 -90 到 90 之间的角度。我怀疑它的代码将旋转校正转换为身份。
【问题讨论】: