Пример #1
0
    void Explode()
    {
        GameObject explode = Instantiate(explodeEffect, transform.position, transform.rotation);

        Destroy(explode, 2f);
        Collider[] colliderToDestroy = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearBy in colliderToDestroy)
        {
            Target      target      = nearBy.GetComponent <Target>();
            TargetEnemy enemyTarget = nearBy.GetComponent <TargetEnemy>();

            if (enemyTarget != null)
            {
                enemyTarget.HitEnemy(damage);
            }

            if (target != null)
            {
                target.HitTarget(damage);
            }
        }

        Collider[] colliderToForce = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider nearBy in colliderToForce)
        {
            Rigidbody rb = nearBy.GetComponent <Rigidbody>();
            if (rb != null)
            {
                rb.AddExplosionForce(force, transform.position, radius);
            }
        }

        Destroy(gameObject);
    }
Пример #2
0
    void Shoot()
    {
        // A simple fire animation using particals.
        gunSmoke.Play();

        // Raycast for targeting purposes.
        RaycastHit rayHit;

        //                      Player            Player forward   Going out to range
        if (Physics.Raycast(transform.position, transform.forward, out rayHit))
        {
            range = rayHit.distance;
        }
        {
            // Set up target.            What the ray hit.
            Target      target      = rayHit.transform.GetComponent <Target>();
            TargetEnemy enemyTarget = rayHit.transform.GetComponent <TargetEnemy>();
            TargetBase  baseTarget  = rayHit.transform.GetComponent <TargetBase>();
            TargetTank  tankTarget  = rayHit.transform.GetComponent <TargetTank>();

            //GameObject hitHere = Instantiate(hitEffect, transform.position + transform.forward * range, Quaternion.LookRotation(rayHit.point));
            GameObject hitHere = Instantiate(hitEffect, rayHit.point, Quaternion.LookRotation(rayHit.normal));
            Destroy(hitHere, 0.5f);

            Debug.DrawLine(transform.position, transform.position + transform.forward * range, Color.red);
            // Show me what the ray hit.
            // Debug.Log(rayHit.transform.name);
            if (enemyTarget != null)
            {   // Target takes damage.
                enemyTarget.HitEnemy(damage);
            }
            // Only if targe is not zero, a valid targe is in range.
            if (target != null)
            {   // Target takes damage.
                target.HitTarget(damage);
            }
            if (baseTarget != null)
            {
                baseTarget.HitBase(damage);
            }
            if (tankTarget != null)
            {
                tankTarget.HitBase(damage);
            }
        }
    }