private void HookedMovement() { driftDuration += Time.deltaTime; Quaternion baseRotation = Quaternion.Lerp(carTransform.rotation, Quaternion.AngleAxis(1 * connectedRotator.ClockwiseValue, Vector3.up), driftDuration / 0.2f); carTransform.rotation = Quaternion.AngleAxis(driftDuration * connectedRotator.ClockwiseValue * skidPower, Vector3.up) * Quaternion.LookRotation(transform.forward); Vector3 newDir; Vector3 newPosition = transform.position + (connectedRotator.GetRotatedPosition(transform.position, carSpeed, out newDir) - transform.position).normalized * carSpeed * 1.5f; newPosition.y = 0; Vector3 overRotatedNewDir = Quaternion.AngleAxis(connectedRotator.ClockwiseValue * 150, carTransform.up) * newDir; Quaternion rot = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(overRotatedNewDir).normalized, Time.deltaTime * 4); rigidbody.MovePosition(newPosition); rigidbody.MoveRotation(rot); }