private Enemy.Enemy findNearestEnemy() { if (bounceCount >= MaxBounce) { return(null); } ++bounceCount; // TODO: Find new target float nearestDist = 0.0f; Enemy.Enemy nearestEnemy = null; float range = DetectionRadius * RefTileMap.TileSize; // Temp disable previous target collider so that raycast works prevTarget.GetComponent <BoxCollider2D>().enabled = false; foreach (GameObject go in RefEnemyManager.ActiveResourcesList) { Enemy.Enemy e = go.GetComponent <Enemy.Enemy>(); // Cannot assign to the current enemy you're on and have to be within range specified if (go != prevTarget.gameObject /*(e.transform.position - transform.position).sqrMagnitude <= rangeSqr*/) { LayerMask mask = 1 << 12; RaycastHit2D raycast = Physics2D.Raycast(transform.position, (go.transform.position - transform.position).normalized, range, mask.value); if (raycast) { // Within range and not on current collided enemy if (nearestEnemy) { // Nearest exists, check distance if (raycast.distance < nearestDist) { nearestDist = raycast.distance; nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>(); } } else { // Nearest does not exists, direct assign nearestDist = raycast.distance; nearestEnemy = raycast.collider.gameObject.GetComponent <Enemy.Enemy>(); } } } } // Enable previous target collider so that everything is back to normal prevTarget.GetComponent <BoxCollider2D>().enabled = true; return(nearestEnemy); }