예제 #1
0
    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);
    }
예제 #2
0
    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);
    }
예제 #3
0
 public void AddBody(AttractedBody body)
 {
     bodies.Add(body);
 }