示例#1
0
    void OnTriggerEnter2D(Collider2D hitInfo)
    {
        if (!(hitInfo.CompareTag("Enemy") || hitInfo.CompareTag("Player")) || hitInfo.CompareTag(goThrough))
        {
            goto a;
        }

        Vector2 hitPosition = transform.position;

        if (hitInfo.CompareTag("Enemy"))
        {
            Enemy enemy = hitInfo.GetComponent <Enemy>();
            if (enemy)
            {
                enemy.TakeDamage(damage);
            }
            else
            {
                EnemyHealer enemyHealer = hitInfo.GetComponent <EnemyHealer>();
                enemyHealer.TakeDamage(damage);
            }
        }
        if (hitInfo.CompareTag("Player"))
        {
            Player player = hitInfo.GetComponent <Player>();
            player.TakeDamage(damage);
        }
        Destroy(gameObject);

        Instantiate(hitPrefab, hitPosition, Quaternion.identity);

        a :;
    }
    GameObject GetClosestObject(string tagName)
    {
        GameObject[] objectsWithTag     = GameObject.FindGameObjectsWithTag(tagName);
        GameObject   bestTarget         = null;
        float        closestDistanceSqr = Mathf.Infinity;
        Vector3      currentPosition    = transform.position;

        foreach (GameObject potentialTarget in objectsWithTag)
        {
            Vector3     directionToTarget = potentialTarget.transform.position - currentPosition;
            float       dSqrToTarget      = directionToTarget.sqrMagnitude;
            Enemy       enemy             = potentialTarget.GetComponent <Enemy>();
            EnemyHealer enemyHealer       = potentialTarget.GetComponent <EnemyHealer>();
            if ((potentialTarget != gameObject) && (enemy && enemy.health < enemy.maxHealth || enemyHealer && enemyHealer.health < enemyHealer.maxHealth))
            {
                if (dSqrToTarget < closestDistanceSqr)
                {
                    closestDistanceSqr = dSqrToTarget;
                    bestTarget         = potentialTarget;
                }
            }
        }
        return(bestTarget);
    }