Olá Flávio!
Não sou especialista no assunto mas tentarei te ajudar.
A primeira coisa que me vem a mente em relação ao loop infinito é que não está acontecendo um incremento dentro do laço que faça ele sair em algum momento. Isso se alia a sua condicional (colisores.length > 0) que tambem pode causar um loop infinito caso os numero sempre sejam maiores que 0 (o que acontece normalmente).
Para resolver esse problema eu criaria uma variavel do lado de fora do loop para auxilia-lo a percorrer o vetor Colisores.
Ficaria algo como:
var cont = 0;
while(cont < colisores.Length)
{
colisores = Physics.OverlapSphere(posicao, generation_range, layerzumbi);
posicao = UnityEngine.Random.insideUnitSphere * generation_range;
posicao += transform.position;
posicao.y = 0;
cont = cont + 1;
yield return null;
}
Repare nas linhas 1, 2 e 8 do código.
Caso tenha alguma duvida me avise.
Espero ter ajudado! :D