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

As torres não são instanciadas

As torres não estão sendo instanciadas. Ocorre algum erro na função "DisparaRaioDaCameraAteUmPonto". O erro está no "Ray raio = Camera.main.ScreenPointToRay(pontoInicial);", segundo o console do Unity.

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

public class Jogo : MonoBehaviour
{

    [SerializeField] private GameObject torrePrefab;

    private void Update()
    {
        if(ClicouComOButaoPrimario())
        {
            ConstroiTorre();
        }
    }

    private bool ClicouComOButaoPrimario()
    {
        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;
    }
}
3 respostas

Acrescentei um novo atributo, "Camera camera", dessa forma deu certo...poderia ser assim?

solução!

Bom dia Edrei,

Pode ser assim sim! É até melhor inclusive.

acontece que quando chamamos o Camera.main internamente a Unity está fazendo uma busca por tag:

GameObject.FingObjectWithTag("MainCamera")

Só que não precisamos fazer isso o tempo inteiro, podemos fazer um cache e economizar processamento da máquina. Provavelmente não estava dando certo antes pq vc tinha trocado a tag da camera do seu jogo.

Vc estava tendo uma referencia nula certo?

Exatamente, minha câmera não estava com a Tag