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