void Attract(AttractedBody objToAttract) { Rigidbody2D rbToAttract = objToAttract.rb; Vector2 direction = rb.position - rbToAttract.position; float r = direction.magnitude; if (r == 0f) { return; } float forceMagnitude = G * rb.mass * rbToAttract.mass / Mathf.Pow(r, 2); Vector2 force = forceMagnitude * direction.normalized; rbToAttract.AddForce(force); }
void Attract(AttractedBody otherAttractor) { Rigidbody2D rb = otherAttractor.MyRigidbody2D; Vector3 myCenterOfMass = this.MyRigidbody2D.worldCenterOfMass; Vector3 otherCenterOfMass = rb.worldCenterOfMass; Vector3 offset = otherCenterOfMass - myCenterOfMass; float sqrOffset = offset.sqrMagnitude; if (sqrOffset == 0f) { return; } float forceMagnitude = G * (rb.mass * this.MyRigidbody2D.mass) / sqrOffset; rb.AddForce(offset.normalized * forceMagnitude * -1f * Time.deltaTime * otherAttractor.Modifier); }
public void AddBody(AttractedBody body) { bodies.Add(body); }