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

SystemNullReferenceExcepetion

Depois que terminei o código inteiro, passou a dar esse problema, antes, não estava acontecendo. Acontece nessa linha "Ray raio = Camera.main.ScreenPointToRay (pontoInicial);" Segue o código abaixo:

using UnityEngine;
using System.Collections;

public class Jogo : MonoBehaviour {

    [SerializeField] private GameObject torrePreFab;

    void Update (){
        if (ClicouComBotaoPrimario()) {
            ConstroiTorre ();
        }
    }


    private bool ClicouComBotaoPrimario (){
        return Input.GetMouseButtonDown (0);

    }

    private void ConstroiTorre(){
        Vector3 posicaoDoClique = Input.mousePosition;
        RaycastHit elementoAtingidoPeloRaio = DisparaRaioDaCameraAteUmPonto (posicaoDoClique);

        if (elementoAtingidoPeloRaio.collider != null) {
            Vector3 posicaoDeCriacaoDaTorre = elementoAtingidoPeloRaio.point;
            Instantiate (torrePreFab, posicaoDeCriacaoDaTorre, Quaternion.identity);
        }
    }

    private RaycastHit DisparaRaioDaCameraAteUmPonto (Vector3 pontoInicial){
        Ray raio = Camera.main.ScreenPointToRay (pontoInicial);
        RaycastHit elementoAtingidoPeloRaio;
        float comprimentoMaximoDoRaio = 100.0f;
        Physics.Raycast (raio, out elementoAtingidoPeloRaio, comprimentoMaximoDoRaio);

        return elementoAtingidoPeloRaio;
    }

}
7 respostas

Esqueci de colocar o erro:

NullReferenceException: Object reference not set to an instance of an object Jogo.DisparaRaioDaCameraAteUmPonto (Vector3 pontoInicial) (at Assets/Scripts/Jogo.cs:31) Jogo.ConstroiTorre () (at Assets/Scripts/Jogo.cs:22) Jogo.Update () (at Assets/Scripts/Jogo.cs:10)

Olá Alexandre,

Esse erro geralmente acontece quando tentamos acessar ou instanciar um objeto e ele não foi referenciado no editor do Unity. Vamos começar tentar olhar o seu objeto Jogo dentro do editor do Unity. Verifica no inspector se ele tem um prefab de torre associado a ele.

Olá Jeferson,

tem sim. Associei o Prefab Torre ao objeto jogo. Pena que não de pra inserir imagem aqui, senão te mostrava o print.

Olá Alexandre,

A mensagem de erro que você postou aqui é a única que aparece no console do Unity?

Além disso, certifique-se de que você possui uma câmera na sua cena. Na linha onde ocorre o erro, a câmera é o único objeto que poderia provocar um NullReference então vale a pena dar uma olhada.

solução!

Olá novamente,

Agora me lembrei que tem um outro detalhe importante que pode estar causando o erro. Para referenciarmos a câmera do jogo geralmente utilizamos a referência Camera.main que o Unity fornece. Mas para que essa referência exista, o Unity precisa saber qual objeto do seu jogo representa a câmera. Isso é feito utilizando-se uma tag específica na câmera da sua cena.

Vamos verificar se a sua câmera possui essa tag. Selecione a câmera no editor do Unity e verifique no Inspector, logo abaixo no nome do objeto, se a tag da câmera está setada para MainCamera. Caso não esteja, selecione esta tag.

Dessa forma, quando utilizarmos o comando Camera.main o Unity será capaz de encontrar a câmera que deve ser utilizada na sua cena.

Sim, é a única que aparece. Segue ela abaixo:

NullReferenceException: Object reference not set to an instance of an object Jogo.DisparaRaioDaCameraAteUmPonto (Vector3 pontoInicial) (at Assets/Scripts/Jogo.cs:31) Jogo.ConstroiTorre () (at Assets/Scripts/Jogo.cs:22) Jogo.Update () (at Assets/Scripts/Jogo.cs:10)

E também possuo uma Camera em Cena.

Quando uso o Debug no código, eu dou o play normalmente e no momento do clique, pra gerar uma torre, acontece o erro. Lá no MonoDevelop, o Debug referencia essa linha de código: Ray raio = Camera.main.ScreenPointToRay (pontoInicial);

Não sei se algo na Camera não está configurado corretamente. Estou completamente perdido.

Segue as configurações da Camera: Clear Flags: Skybox Culling Mask : Everything Projection: Perspective Field of View: 45 Clipping Plane Near 0,3 Far: 1000 viewreport x:0 Y:0 W:1 H:1 depth: 0 Rendering Path:Use Player Settings Target Texture: none Occlusion culling: marcado HDR: desmarcado Target Display: Display 1

Desconsidere a ultima mensagem. O problema era a falta do tag na camera. Resolveu. Muito Obrigado pela ajuda.

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