1
resposta

Posição da torre não fica no exato lugar do clique.

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

public class Jogo : MonoBehaviour {

    [SerializeField] private GameObject torrePrefab;
    void Update(){
        if(ClicouComBotaoPrimario()){
            ConstroiUmaTorreNova ();
        }
    }

    private bool ClicouComBotaoPrimario(){

        return Input.GetMouseButtonDown (0);

    }

    private void ConstroiUmaTorreNova(){

        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){

        float comprimentoMaximoDoRaio = 200.0f;
        RaycastHit elementoAtingidoPeloRaio;
        Ray raio = Camera.main.ScreenPointToRay (pontoInicial);
        Physics.Raycast (raio, out elementoAtingidoPeloRaio ,comprimentoMaximoDoRaio);

        return elementoAtingidoPeloRaio;
    }
}
1 resposta

Olá Aécio,

Verifique se dentro do prefab da torre a base está posicionada nas coordenadas (0,0,0). Para isso, selecione o prefab que deve estar localizado junto aos assets do seu project, selecione a base da torre, vá até o inspector e verifique se o transform position está com as três coordenadas (x,y,z) setadas para 0. Se não estiver, é só modificar para esses valores e realizar o teste novamente.

Dessa forma, quando criarmos o prefab na posição do clique, a base será posicionada na posição correta.