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

Matando zumbis + jogo travando

Estou precisando de várias ajudas :D

1- não acontece sempre, mas às vezes, depois que atiro em um zumbi, os outros param de me seguir.

2- Acontece às vezes também de o jogo pausar sem eu ter feito nada. 3- Estão aparecendo essas mensagens:

"MissingReferenceException: The object of type 'GameObject'has been destroyed but you are still trying to access it. (ok, eu matei os três, mas como essa mensagem desaparece?)

"NullReferenceException:Object reference not set to an instance of an object"

E depois que coloquei o GameObject pro gerador de zumbis: "ArgumentOutOfRangeException: < 0 || > = this.Length

heeeeeelp

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

public class ControlaJogador : MonoBehaviour {

    public float velocidade = 10;
    Vector3 direcao;

    public LayerMask MascaraChao;

    public GameObject TextoGameOver; //ativar quando necessário
    public bool Vivo = true;

    void Start (){
        Time.timeScale = 1; //tempo normal
    }

    void Update () {


        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

        direcao = new Vector3(eixoX, 0, eixoZ);

        if (direcao != Vector3.zero){
            GetComponent<Animator>().SetBool("movendo", true);
        }
        else {
            GetComponent<Animator>().SetBool("movendo", false);
        }

        if (Vivo == false){
            if(Input.GetButton("Fire1")){
                SceneManager.LoadScene("game");
            }
        }
    }

    void FixedUpdate() {
        //movimentar pela fisica

        GetComponent<Rigidbody>().MovePosition(GetComponent<Rigidbody>().position + 
            (direcao * velocidade * Time.deltaTime));



        Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);

        Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);

        RaycastHit impacto; //toque do raio em qualquer coisa



        if(Physics.Raycast(raio, out impacto, 150, MascaraChao))
        {
            Vector3 posicaoMiraJogador = impacto.point - transform.position;

            posicaoMiraJogador.y = 0;
            //tirando modificações na posição em y

            Quaternion novaRotacao = Quaternion.LookRotation(posicaoMiraJogador);

            GetComponent<Rigidbody>().MoveRotation(novaRotacao);
        }
    }



}

public class ControlaZumbi : MonoBehaviour {

    public GameObject Jogador;
    public float Velocidade = 5;  //mais devagar que o jogador

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }

    void FixedUpdate() {
        Vector3 direcao  = Jogador.transform.position - transform.position;
        Quaternion novaRotacao = Quaternion.LookRotation(direcao);

        //olhar pro personagem
        GetComponent<Rigidbody>().MoveRotation(novaRotacao);    

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

        //se tou perto, me movimento
    if (distancia > 2.5 ){ //2 porque 1 de raio do colisor de cada um - bater colisores 


        GetComponent<Rigidbody>().MovePosition
        (GetComponent<Rigidbody>().position + direcao.normalized * Velocidade * Time.deltaTime);

        GetComponent<Animator>().SetBool("Atacando", false);

    }

    else {
        GetComponent<Animator>().SetBool("Atacando", true);

    }


}

void AtacaJogador ()
{
    Time.timeScale = 0;
    //pausa o jogo
    Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);

    Jogador.GetComponent<ControlaJogador>().Vivo = false;

}



}
6 respostas
  • A parte de parar de seguir quando eu atiro em um foi arrumada quando criei o gerador de zumbis com zumbis diferentes ^^ mas não entendi bem o que era *
solução!

Thaís, tudo bom?

O que pode estar acontecendo é na hora de gerar seus zumbis se você tem mais ou menos tipos de zumbi ele tenta usar um tipo fora do escopo.

Exemplo: tenho 15 tipos de zumbis mas meu gerador tenta do 0 até 17.

Se ele tentar acessar o 16 ou 17 vai dar errado.

O que você pode fazer pra solucionar e automatizar essa contagem é mudar isso pra ao invés de usar um número, contar os filhos de um objeto.

Então você pode mudar o AleatorizaTipoZumbi a linha do Random pra algo como:

int geraTipoZumbi = Random.Range(1, transform.childCount);

Assim o Unity se preocupa com isso e não você. Em outras partes do curso eu toco nesse assunto com mais profundidade, mas acredito que isso pode solucionar seu problema por agora. :)

Sobre pausar quando dá erro, dá uma olhada no Console, veja se a opção Error Pause tá marcada, ela para o jogo quando qualquer erro acontece.

Se ainda se manter você consegue zipar o projeto e mandar o link aqui.

Oi Henrique, esse erro era antes do gerador de zumbis! Depois que coloquei ele, ficou tudo certo nessa parte :}

Ah sim, agora vi que voce tá falando do último erro! vou arrumar :}

Parece que os outros erros sumiram também

Tudo certo então? Ou ficou algum?

Provavelmente era um erro que estava desencadeando outros.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software