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

o codigo nao encontra a definição de direcao e velocidade

depois de assistir a aula fui textar como no video mas um puoco depois de ter ligado o jogo apareceu um erro que nao consigo solucionar. O erro é esse abaixo:

NullReferenceException: referência de objeto não definida para uma instância de um objeto MovimentoPersonagem.Rotacionar (UnityEngine.Vector3 direcao) (em Assets/codigos/MovimentoPersonagem.cs:19) ControlaInimigo.FixedUpdate() (em Assets/codigos/ControlaInimigo.cs:24)

15 respostas

Olá, Edison! Parece que você está enfrentando um problema comum em programação, que é a exceção NullReferenceException. Isso geralmente ocorre quando tentamos acessar um objeto ou uma de suas propriedades/métodos que ainda não foi instanciado.

No seu caso, o erro está acontecendo na linha 19 do script MovimentoPersonagem.cs e na linha 24 do script ControlaInimigo.cs. Parece que o objeto direcao não está sendo corretamente instanciado antes de ser usado.

Confere se o MovimentoPersonagem na linha 19 tem algo que não existe no zumbi, lembra de aplicar o prefab

Espero ter ajudado e bons estudos!

ola henrique, na linha 19 do "MovimentoPersonagem" tem novaRotacao que o "Controla inimigo" não tem. E sobre a direcao, como eu resolvo esse problema?

Pode colar como está seus dois scripts aqui?

public class MovimentoPersonagem : MonoBehaviour{
private Rigidbody meuRigidbody;
void AwaKe(){
    meuRigidbody = GetComponent<Rigidbody>();
}


    public void Movimentar (Vector3 direcao, float velocidade)
    {
       meuRigidbody.MovePosition (meuRigidbody.position + (direcao.normalized * velocidade * Time.deltaTime));
    }
    public void Rotacionar (Vector3 direcao)
    {
        Quaternion novaRotacao = Quaternion.LookRotation(direcao);
     meuRigidbody.MoveRotation(novaRotacao);
    }
}
public class ControlaInimigo : MonoBehaviour {
public GameObject Jogador;
public Quaternion novaRotacao;
public float Velocidade;
private MovimentoPersonagem meuMovimentoInimigo;
    // Start is called before the first frame update
    void Start() {
     Jogador = GameObject.FindWithTag("Jogador"); 
     int geraTipoZumbi = Random.Range(1, 28);
     transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
     meuMovimentoInimigo = GetComponent<MovimentoPersonagem>(); 
    }

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

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

       if( distancia > 2.5)
       {
       meuMovimentoInimigo.Movimentar(direcao, Velocidade);
       
       GetComponent<Animator>().SetBool("Atacando", false);
       }
       else
       {
        GetComponent<Animator>().SetBool("Atacando", true);
       }
    }
    void AtacaJogador ()
    {
      int dano = Random.Range(20, 30);
    Jogador.GetComponent<ControlaPersonagem>().TomarDano(dano);
    }    
}
public class ControlaInimigo : MonoBehaviour {
public GameObject Jogador;
public Quaternion novaRotacao;
public float Velocidade;
private MovimentoPersonagem meuMovimentoInimigo;
   
    void Start() {
   
     Jogador = GameObject.FindWithTag("Jogador"); 
     
     int geraTipoZumbi = Random.Range(1, 28);
     
     transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
     
     meuMovimentoInimigo = GetComponent<MovimentoPersonagem>(); 
    }

o primeiro e do movimentoPersonagem e o segundo e terceiro são do controlaInimigo.

Ok e o inimigo tem o script ControlaInimigo e MovimentoPersonagem anexados a ele, certo?

sim, esta.

Faz o seguinte, faz um .zip de toda a pasta do projeto e coloca em algum lugar tipo Dropbox, Google Drive, etc. aí eu baixo aqui e dou uma olhada :)

Olá! Pode colocar o compartilhamento como publico? É só clicar com o botão direito no arquivo e editar nas opções, assim consigo acessar.

mudei aqui

solução!

Confere o método Awake do MovimentaPersonagem, lembra que o nome tem que ser certinho está AwaKe fazendo com que a variável do rigidbody não seja preenchido e tudo falhe.

Acho que resolvendo isso os problemas desaparecem.

Bons estudos!

obrigado cara, funcionou certinho.

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