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); }