コード例 #1
0
    void OnCollisionEnter(Collision collision)
    {
        Collider collider = collision.collider;

        if (collider.CompareTag("Ship"))
        {
            ShipScript ship = collider.gameObject.GetComponent <ShipScript>();
            ship.Die();
            Destroy(gameObject);
        }
        else if (collider.CompareTag("Fort"))
        {
            FortScript fort = collider.gameObject.GetComponent <FortScript>();
            fort.life -= 1;
            Destroy(gameObject);
        }
        else
        {
            Debug.Log("collided with " + collider.tag);
            Destroy(gameObject);
        }
    }
コード例 #2
0
    public Vector3 applyForces(ref Vector3 shipPos, ref Vector3 shipVel, float shipMass, float timestep)
    {
        Vector3 r = shipPos - transform.position;
        float   actualStrength = strength;

        Vector3 rdash = new Vector3(r.x - innerRadius, r.y - innerRadius, r.z - innerRadius);
        Vector3 temp  = new Vector3(outerRadius - rdash.x, outerRadius - rdash.y, outerRadius - rdash.z);

        Vector3 pullVelocity = new Vector3(0.0f, 0.0f, 0.0f);
        Vector3 pullForce    = new Vector3(0.0f, 0.0f, 0.0f);

        if (r.magnitude < innerRadius)
        {
            //destroyship byt sucking it in the blackhole
            ObjectGeneratorScript obs        = GameObject.Find("ObjectGenerator").GetComponent <ObjectGeneratorScript>();
            GamePlayManagerScript gms        = GameObject.Find("GamePlayManager").GetComponent <GamePlayManagerScript>();
            ShipScript            shipscript = obs.playerShip.GetComponent <ShipScript>();

            shipscript.Die();
            gms.StartCoroutine("GameOverandReset");
        }
        else if (r.magnitude < middle1Radius)
        {
            actualStrength *= 2.0f;

            pullVelocity.x = (-r.x / r.sqrMagnitude) * (temp.x / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.y = (-r.y / r.sqrMagnitude) * (temp.y / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.z = (-r.z / r.sqrMagnitude) * (temp.z / outerRadius) * (actualStrength * innerRadius);
            pullForce      = pullVelocity * (shipMass / timestep);
        }
        else if (r.magnitude < middle2Radius)
        {
            actualStrength *= 1.8f;

            pullVelocity.x = (-r.x / r.sqrMagnitude) * (temp.x / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.y = (-r.y / r.sqrMagnitude) * (temp.y / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.z = (-r.z / r.sqrMagnitude) * (temp.z / outerRadius) * (actualStrength * innerRadius);
            pullForce      = pullVelocity * (shipMass / timestep);
        }
        else if (r.magnitude < middle3Radius)
        {
            actualStrength *= 1.5f;

            //change velocity such that it locks to a stable orbit
            if ((orbitalSpeed < (shipVel.magnitude + epsilon)) || (orbitalSpeed > (shipVel.magnitude + epsilon)))
            {
                orbitalSpeed        = shipVel.magnitude;
                orbitalAcceleration = -r.normalized * (orbitalSpeed * orbitalSpeed / r.magnitude);
            }

            pullForce = orbitalAcceleration * shipMass;
        }
        else
        {
            pullVelocity.x = (-r.x / r.sqrMagnitude) * (temp.x / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.y = (-r.y / r.sqrMagnitude) * (temp.y / outerRadius) * (actualStrength * innerRadius);
            pullVelocity.z = (-r.z / r.sqrMagnitude) * (temp.z / outerRadius) * (actualStrength * innerRadius);
            pullForce      = pullVelocity * (shipMass / timestep);
        }

        return(pullForce);
    }