// Attract another gravitational body public void Attract(GravityBody gb) { // Vector from target body to this body Vector3 r_to_this = this.bodyTransform.position - gb.bodyTransform.position; // Newton's law of gravitation Vector3 force = r_to_this * G * gb.GetMass() * this.GetMass() / Mathf.Pow(r_to_this.magnitude, 3); gb.SetForceTo(force); }
// Set this body to orbit around some other CentreBody, tangential to some normal vector private void SetOrbitalVelocity(Vector3 normal) { Vector3 r_to_target = this.bodyTransform.position - OrbitTarget.bodyTransform.position; float magnitude = r_to_target.magnitude; Vector3 unitTangent = Vector3.Cross(normal, r_to_target); Vector3 orbitalVelocity = Mathf.Sqrt(G * OrbitTarget.GetMass() / Mathf.Pow(magnitude, 3)) * unitTangent; initVelocity = orbitalVelocity; Debug.Log(initVelocity); }
// Set this body to orbit around some other CentreBody, tangential to some normal vector private void SetOrbitalVelocity(Vector3 normal) { // Vector pointing towards the orbit target Vector3 r_to_target = this.bodyTransform.position - OrbitTarget.bodyTransform.position; // Magnitude float magnitude = r_to_target.magnitude; Vector3 tangentDirection = Vector3.Cross(normal, r_to_target); Vector3 orbitalVelocity = Mathf.Sqrt(G * OrbitTarget.GetMass() / Mathf.Pow(magnitude, 3)) * tangentDirection; // Setting this body's initial velocity as the calculated orbit velocity initVelocity = orbitalVelocity; Debug.Log(initVelocity); }