3
respostas

O texto está ficando em Preto e o tiro na lateral está fugindo do centro do cursor

A cor do texto está branco, mas quando ele começa a contar ele muda a cor de volta para o padrão preto. Ajustei o cursos com os valores para X e Y no hotspot, ao atirar para o norte fica tudo certo, mas quando me aproximo de leste ou oeste a bala não sai mais no centro da mira.

3 respostas

Oi, Ronan, tudo bem?

Você consegue subir um zip do seu projeto colando um link do Dropbox, Google Drive ou similar aqui? Aí eu dou uma olhada nessa parte do texto, porque não entendi muito bem.

Quanto ao não sair no centro, na verdade a bala sai do centro mas quando o personagem rotaciona a animação que está quebrada um pouco para o lado mesmo, aí parece que não está saindo tão do centro da arma. Tem como corrigir compensando a rotação do osso do tronco baseado na rotação da personagem, mas continue seu jogo e deixe esses detalhes mais finos pro final.

Henrique, segue o link para clonar o meu projeto: git clone https://rpbizarro@bitbucket.org/rpbizarro/zumbigame.git

O problema sobre a bala sair do centro é que ela realmente sai bastante, como se estivesse mirando na diagonal, quando já virei totalmente o personagem (para a esquerda ou direita).

Legal, entendi seu problema.

Por causa do ângulo da câmera o acerto no chão ocorre um pouco depois da posição do personagem, e quando estamos olhando para a direita e esquerda isso fica mais aparente. Para corrigir isso podemos mexer na angulação da câmera.

Também daria pra corrigir usando Raycast em objetos mas dando menos trabalho e até mostrando uma forma diferente de fazer a mesma coisa (que é um pouco mais difícil), poderíamos ter um código da seguinte forma:

Criamos um raio apontando para a posição do mouse como já temos.

Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);

Depois ao invés de usarmos o nosso chão para fazer a colisão com o raio, nós criamos um plano usando como normal, o lado que ele aponta, a direção para cima e a posição ficaria bem onde queremos que a mira fique, por isso pensei em algo como criar uma referência ao local da mira:

    Plane plano = new Plane(Vector3.up, posicaoMira.transform.position);
// lembre-se de criar e preencher a variável posicaoMira

Em seguida podemos usar o Raycast no plano que usa uma variável de distância como referência de qual a distância do raio quando ele tocou no plano e apontamos nosso jogador para essa direção:

float distanciaColisao;

if (plano.Raycast(raio, out distanciaColisao))
{
    Vector3 localColisao = raio.GetPoint(distanciaColisao);
    localColisao.y = 0; //ou transform.position.y

    //direcao para onde vamos olhar baseado onde estamos
    Vector3 posicaoParaOlhar = localColisao - transform.position;

    Quaternion novaRotacao = Quaternion.LookRotation(posicaoParaOlhar);
    GetComponent<Rigidbody>().MoveRotation(novaRotacao);
}

Assim temos mais precisão e controle de onde nosso raio está saindo e onde ele está colidindo.

Referência

Acho que isso soluciona o problema e aproveitamos e vimos uma forma nova de fazer.