void FixedUpdate() { float newDist = ((Vector2)transform.position - OrbitPoint).magnitude; if (newDist > distanceToOrbit) { Rigidbody2D rb = GetComponent <Rigidbody2D>(); rb.isKinematic = false; PointGravity.enabled = true; float toPlanet = (transform.position - Planet.transform.position).magnitude; rb.AddForce( Direction.normalized * Mathf.Sqrt(Planet.CalculateGravity(toPlanet, rb.mass) * toPlanet), ForceMode2D.Impulse); if (OnFlyingComplete != null) { OnFlyingComplete(); } enabled = false; } else { transform.position += (Vector3)(Direction.normalized * FlySpeed * Time.fixedDeltaTime); } distanceToOrbit = newDist; }