The intention of this code segment is to predict the location of an object based on it's forward velocity and angular velocity. However, the position is not showing where it's supposed to be; first when going straight the predicted position is shown as the same as current position, and second when turning the position is almost correct, but with a larger turning radius than expected (as shown in the image). Code (csharp): Quaternion currentQuat = Quaternion.AngleAxis(syncEndRotation.eulerAngles.y, Vector3.up); Vector3 currentDir = currentQuat * Vector3.forward; float predictedYrot = syncEndRotation.eulerAngles.y + ((AngularVel) * (averagePing)); Quaternion predictedQuat = Quaternion.AngleAxis(predictedYrot, Vector3.up); Vector3 predictedDir = predictedQuat * Vector3.forward; float radius = Vel / AngularVel; float angle = AngleDiff(predictedQuat.eulerAngles.y, syncEndRotation.eulerAngles.y); float predictedDist = (radius * Mathf.Sin(angle / 2f)) / 2; //Quaternion RadiusDirQuat = Quaternion.AngleAxis(syncEndRotation.eulerAngles.y + 90, Vector3.up); //Vector3 radiusDir = RadiusDirQuat * Vector3.forward; //Debug.DrawRay(syncEndPosition + Vector3.up, radiusDir * radius, new Color(1, 0, 0.5f, 1)); // turning radius //Vector3 predictedPos = syncEndPosition + Direction * Vel * (averagePing * 10); <-- old Vector3 predictedPos = syncEndPosition + (predictedDir * predictedDist); Debug.DrawRay(syncEndPosition + Vector3.up, Vector3.down, Color.green); // current position Debug.DrawRay(syncEndPosition + Vector3.up, currentDir, Color.gray); // current direction Debug.DrawRay(syncEndPosition + Vector3.up, predictedDir * predictedDist, Color.yellow); // predicted direction Debug.DrawRay(predictedPos + Vector3.up, Vector3.down, Color.blue, 1f); // predicted position private float AngleDiff(float a, float b) { float angle = a - b; if (angle > 180) angle -= 360; if (angle < -180) angle += 360; return angle; }