internal virtual void SearchInteractables() { RaycastHit[] hits = Physics.SphereCastAll(transform.position, interactionRange, Vector3.up, 0, interactableLayerMask); List <EnemyController> nearbyEnemies = new List <EnemyController>(); List <Interactable> nearbyInteractables = new List <Interactable>(); foreach (var hit in hits) { EnemyController enemy = hit.collider.GetComponent <EnemyController>(); if (enemy != null) { nearbyEnemies.Add(enemy); continue; } Interactable interactable = hit.collider.GetComponent <Interactable>(); if (interactable != null && interactable.CanBeAssigned(this)) { nearbyInteractables.Add(interactable); } } if (nearbyEnemies.Count > 0) { // Attack closest enemy var closestEnemy = Helper.GetClosestObject(nearbyEnemies.ToArray(), transform.position); currentInteractable = closestEnemy; State = closestEnemy.AssignBlob(this); return; } if (nearbyInteractables.Count > 0) { // Interact with closest interactable currentInteractable = Helper.GetClosestObject(nearbyInteractables.ToArray(), transform.position); State = currentInteractable.AssignBlob(this); return; } }