bool InterpolrateTransform() { var count = _recievedData.Count; if (count <= 0) { return(false); } var tnow = Time.timeSinceLevelLoad; var tinterp = -latency *GetNetworkSendInterval() + tnow; while (_recievedData.Count >= 2 && _recievedData [1].time <= tinterp) { _recievedData.RemoveAt(0); } var d0 = _recievedData [0]; var d1 = d0; if (_recievedData.Count >= 2) { d1 = _recievedData [1]; } TransformData.Load(transform, d0, d1, tinterp); return(true); }
public static void Load(Transform transform, TransformData d0, TransformData d1, float time) { var dt = d1.time - d0.time; if (-EPSILON < dt && dt < EPSILON) { d0.Load(transform); return; } var t = Mathf.Clamp01((time - d0.time) / (d1.time - d0.time)); Load(transform, Vector3.Lerp(d0.position, d1.position, t), Quaternion.Lerp(d0.rotation, d1.rotation, t), Vector3.Lerp(d0.scale, d1.scale, t)); }