void FixedUpdate() { foreach (KeyValuePair <short, NetworkedActor> na in actors) { VoosActor va = na.Value.actor; if (va != null && !va.reliablePhotonView.isMine && !va.IsParented()) { Rigidbody rb = va.GetComponent <Rigidbody>(); bool isDynamic = rb != null && va.GetEnablePhysics(); Vector3 pos = rb != null ? rb.position : va.transform.position; Quaternion rot = rb != null ? rb.rotation : va.transform.rotation; if (!isDynamic || va.GetReplicantCatchUpMode()) { // Kinematic or non-RB. Lerp it. Quaternion lerpedRot = Quaternion.Lerp(rot, na.Value.lastRotation, Mathf.Clamp01(Time.deltaTime * 5)); var damped = Vector3.SmoothDamp(pos, na.Value.lastPosition, ref na.Value.posDampVelocity, 0.2f); va.ForceReplicantPosition(damped); va.ForceReplicantRotation(lerpedRot); } else { rb.angularVelocity *= 0.9f; if (!SnapRigidbodyOnRecv) { // Let physics simulate the position with our corrective velocity, // but we still lerp the rotation. Quaternion lerpedRot = Quaternion.Lerp(rot, na.Value.lastRotation, Mathf.Clamp01(Time.deltaTime * 5)); rb.rotation = lerpedRot; } } } } }