2
respostas

UnityException: Transform child out of bounds ControlaZumbi.AleatorizarZumbis () (at Assets/scripts/ControlaZumbi.cs:101) ControlaZumbi.Start () (at Assets/scripts/ControlaZumbi.cs:28)

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ControlaZumbi : MonoBehaviour, IMatavel {

public GameObject jogador;
private Status statusInimigo;
private MovimentoPersonagens meuMovimentoPersonagem;
private AnimacaoPersonagem AnimacaoInimigo;
public AudioClip SomDeMorte;
private Vector3 PosicaoAleatoria;
private Vector3 direcao;
private float ContadorVagar;
private float tempodeposicoes = 4;
private float GerarKitMedico = 0.1f;
public GameObject KitMedicoPrefab;
private BarraVida scriptBarraVida;
public GeradorZumbis meuGerador; 


// Use this for inicialization
void Start()
{
    jogador = GameObject.FindWithTag("jogador");
    AnimacaoInimigo = GetComponent<AnimacaoPersonagem> ();
    meuMovimentoPersonagem = GetComponent<MovimentoPersonagens>();
    AleatorizarZumbis();
    statusInimigo = GetComponent<Status>();
    scriptBarraVida = GameObject.FindObjectOfType(typeof(BarraVida)) as BarraVida;
}



void FixedUpdate()
{
    float distancia = Vector3.Distance(transform.position, jogador.transform.position);

    meuMovimentoPersonagem.Rotacionar(direcao);
    AnimacaoInimigo.Movimentar(direcao.magnitude);


    if(distancia > 15)
    {
        Vagar ();
    }
    else if (distancia > 2.5)
    {
        direcao = jogador.transform.position - transform.position;

        meuMovimentoPersonagem.Movimentar(direcao, statusInimigo.Velocidade);

        AnimacaoInimigo.Atacar(false);
    }
    else
    {
        direcao = jogador.transform.position - transform.position;

        AnimacaoInimigo.Atacar(true);
    }
}

void Vagar() 
{ 
    ContadorVagar -= Time.deltaTime;
    if(ContadorVagar <= 0)
    {
      PosicaoAleatoria = AleatorizarPosicao();
        ContadorVagar += tempodeposicoes + Random.Range (-1f, 1f);


    }

    bool ficouperto = Vector3.Distance(transform.position, PosicaoAleatoria) <= 0.05;
    if (ficouperto == false)
    {
        direcao = PosicaoAleatoria - transform.position;
        meuMovimentoPersonagem.Movimentar(direcao, statusInimigo.Velocidade);
    }
   
  
}

Vector3 AleatorizarPosicao() 
{
    Vector3 posicao = Random.insideUnitSphere * 10;
    posicao += transform.position;
    posicao.y = transform.position.y;

    return posicao;
}

void AtacaJogador()
{
    int dano = Random .Range(20, 30);
    jogador.GetComponent<ControlaJogador>().TomarDano(dano);
}
void AleatorizarZumbis ()
{
    int geraTipoZumbi = Random.Range(1, 28);
    transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
public void TomarDano(int dano)
{
  
    statusInimigo.Vida -= dano;

if (statusInimigo.Vida  <= 0)
    {
        Morrer();
    }
}
public void Morrer()
{
    Destroy(gameObject, 2 );
    AnimacaoInimigo.Morrer();
    meuMovimentoPersonagem.Morrer();
    this.enabled = false;
    ControlaAudio.instancia.PlayOneShot(SomDeMorte);
    GeracaoKitMedico (GerarKitMedico);
    scriptBarraVida.QuantidadeDeZumbis();
    meuGerador.DiminuirQuantidadeDeZumbisVivos();
}

void GeracaoKitMedico (float  porcentagemGeracao)
{
    if (Random.value  <= porcentagemGeracao)
    {
        Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
    }
}

}

2 respostas

aparece isso e o jogo nao roda, mas depois de um tempo ele roda normal sem aparecer nenhum problema.

Oi, miguel, tudo bem?

provavelmente é o método AleatorizarZumbis você apagou algum tipo de zumbi ou mudou o ordem?

Dá uma conferida lá se vai no 1 ao 27 (no random é 28 mas é exclusivo então vai do 1 ao 27), temos então que ter 27 tipos de zumbi lá.

Bons estudos!