Exemple #1
0
    // 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);
    }
Exemple #2
0
    // 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);
    }