Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Projeção da posição da torre e do inimigo no plano

Projeção da posição da torre e do inimigo no plano

Durante a vídeo aula, foi feita uma projeção da posição tanto da torre quanto do inimigo no plano, na explicação fala que, foi feito isso é porque a distancia não é sempre a mesma.

private bool EstaNoRaioDeAlcance (GameObject inimigo)
    {
        Vector3 posicaoDaTorre = this.transform.position;
        Vector3 posicaoDaTorreNoPlano = Vector3.ProjectOnPlane(posicaoDaTorre, Vector3.up);

        Vector3 posicaoDoInimigo = inimigo.transform.position;
        Vector3 posicaoDoInimigoNoPlano = Vector3.ProjectOnPlane(posicaoDoInimigo, Vector3.up);

        float distanciaParaInimigo = Vector3.Distance(posicaoDaTorreNoPlano, posicaoDoInimigoNoPlano);

        return distanciaParaInimigo <= raioDeAlcance;
    }

Minhas duvidadas são: Por que a distancia pode variar de acordo com a posição do inimigo? O que esse projeção do plano faz? Se utilizar a posição sem fazer a projeção não da na mesma?

1 resposta
solução!

Olá Henrique!

A projeção é necessária pois sempre estamos calculando a distância da base da torre até o seu alvo. O problema é que as torres podem estar localizadas em posições mais elevadas e aí nesse caso o alcance efetivo (que o jogador consegue perceber) seria menor. Para entender melhor vamos ver a imagem abaixo:

Sem projeção

Repare que a distância da torre 1 para o inimigo é igual a 2 unidades. Já a torre 2, por estar numa posição mais elevada, tem uma distância até o alvo superior a 2 unidades apesar da distância horizontal da torre 2 até o inimigo ser exatamente 2.

Quando fazer a projeção, estamos jogando a posição da torre no mesmo plano dos inimigos. Dessa forma, independente da altura da torre, a distância considerada será sempre a distância da torre ao inimigo no plano dos inimigos como ilustrado na figura abaixo:

Com projeção

Agora sim, as duas torres conseguiriam atirar no inimigo, independente das suas alturas no cenário. Esse comportamento é mais fácil de ser acompanhado e entendido pelo jogador apesar de não ser o mais correto matematicamente se considerarmos que o alcance da torre é exatamente 2.