Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

meus zumbis n tao aparecendo

ta apresentando esse erro e eu n to conseguindo resolver desde cedo NullReferenceException: Object reference not set to an instance of an object ControlaZumbi.FixedUpdate () (at Assets/Scripts/ControlaZumbi.cs:36)

codigo do zumbi

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControlaZumbi : MonoBehaviour, IMatavel
{
    public GameObject Jogador;
    public float Velocidade = 5;
    private Status statusZumbi;
    public AudioClip SomDeMorte;
    private Vector3 posicaoAleatoria;
    private Vector3 direcao;
    private MovimentaPersonagem movimentaZumbi;
    private AnimacaoPersonagem animacaoZumbi;
    private float contadorVagar;
    private float tempoEntrePosicoesAleatorias = 4;


    // Start is called before the first frame update
    void Start()
    {
        Jogador = GameObject.FindWithTag("Jogador");
        GetComponent<MovimentaPersonagem>();
        GetComponent<AnimacaoPersonagem>();
         AleatorizarZumbi();
        statusZumbi = GetComponent<Status>();
    }

    // Update is called once per frame

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


        animacaoZumbi.Movimentar(direcao.magnitude);

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

            animacaoZumbi.Atacar(false);            
        }
        else
        {
            animacaoZumbi.Atacar(true);
        }
    }

    void Vagar()
    {
        contadorVagar -= Time.deltaTime;
        if(contadorVagar <= 0)
        {
            posicaoAleatoria = AleatoriarPosicao();
            contadorVagar += tempoEntrePosicoesAleatorias;
        }
        bool ficouPertoAteDemais = Vector3.Distance(transform.position, posicaoAleatoria) != 0.05;
        if (ficouPertoAteDemais == false)
        {
            direcao = posicaoAleatoria - transform.position;
            movimentaZumbi.Movimentar(direcao, Velocidade);
        }

    }

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

        return posicao;
    }
    void AtacaJogador()
    {
        int dano = Random.Range(5, 10);
        Jogador.GetComponent<ControlaJogador>().TomarDano(dano);

    }

    void AleatorizarZumbi()
    {
        int geraTipoZumbi = Random.Range(1, 28);
        transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
    }

    public void TomarDano(int dano)
    {
        statusZumbi.Vida -= dano;
        if(statusZumbi.Vida >= 0)
        {
            Morrer();
        }
    }

    public void Morrer()
    {
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(SomDeMorte);
    }
}
12 respostas

Oi, Bruna, tudo bem?

No seu Start tem alguns GetComponent soltos que faltou atribuir a uma variável pra você pode usar durante o código por isso tá dando esse null. A variável tá sem valor quando ela é chamada.

void Start()
    {
        Jogador = GameObject.FindWithTag("Jogador");
        GetComponent<MovimentaPersonagem>(); <---
        GetComponent<AnimacaoPersonagem>(); <---
         AleatorizarZumbi();
        statusZumbi = GetComponent<Status>();
    }

Já ajustei essa parte porem o erro continua aparecendo NullReferenceException: Object reference not set to an instance of an object ControlaZumbi.FixedUpdate () (at Assets/Scripts/ControlaZumbi.cs:36)

e aparece esse tbm Look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation (UnityEngine.Vector3) MovimentaPersonagem:Rotacionar (UnityEngine.Vector3) (at Assets/Scripts/MovimentaPersonagem.cs:21) ControlaZumbi:FixedUpdate () (at Assets/Scripts/ControlaZumbi.cs:35)

os zumbis não estao aparecendo o jogador fica tomando dano do nada. gostaria de saber se posso ve o seu codigo para fazer o comparativo e tentar ve onde errei

Oi, Bruna, todo final de módulo você pode baixar o arquivo daquela aula para comparar.

Como está seu código agora?

Look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation esse aqui é só um comentário em branco certo? Não é um erro é só um pequeno aviso. Tratamos dele depois.

Consegui ajeitar mais ou menos, tinha um erro no codigo do jogador mas ainda assim ele continua perdendo vida do nada mas esse aviso continua aparecendo Look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation

Oi, Bruna, tudo bem?

Você quer fazer um .zip do seu projeto e mandar pra gente dar uma olhada?

Aqui ta o zip do projeto. Eu ja tentei da uma olhada no forum pra ve oq pode ta dando de errado mas ate agr nd. https://drive.google.com/file/d/1vttQY2lK0nFhhw5yftBaXhrJ9AnSmD1J/view?usp=sharing

Oi, Bruna, tudo bem?

Manda o projeto todo porque eu vou rodar ele na máquina mesmo então preciso dos prefabs que você fez.

Se quiser diminuir o tamanho é só zipar somente a pasta Assets e ProjectSettings

Oi, Bruna, dei uma olhada no seu projeto e vi algumas coisas que arrumam esse erro que você está tendo:

  • Os geradores que estão na scene de "backup game" estão com a Tag "Jogador" isso faz com que os zumbis ataquem eles
  • O Animator do zumbi está começando em parameters com "Atacando" true então o zumbi já começa atacando de longe

ah sim, por isso eles estavam atacando de longe, obg! mas agr ta dando probleminha nos gizmos q n tao aparecendo

Assets\Scripts\GeradorZumbis.cs(38,13): warning CS8321: The local function 'OnDrawGizmos' is declared but never used
solução!

Oi, Bruna, tudo bem?

Assim como os outro isso é só um warning e não um erro. Dá uma olhada no erro ele está dizendo que OnDrawGizmos foi declarado mas nunca usado. Esse warning aparece na Unity ou no editor de código?

Quer colar o código por aqui?

Tava dando erro mas n ta dando erro mais n