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

[Bug] Bug com a mira

Vi que outras pessoas tiveram a mesma dúvida mas eu não consegui implementar as soluções dadas pois quando eu as implementava, outro bug ocorre. O problema que eu estou tendo é que o centro da mira não está alinha com a trajetória da bala. Segui tudo o que o professor fez, mudei a mira para 32x32 e movimentei a ponta do cursor nas preferencias da Unity. Quando eu segui o processo indicado em tópicos parecidos, o problema da mira se resolveu, mas agora quando eu coloco a mira em cima do meu personagem ele rotaciona no eixo Y, mesmo eu colocando localColisao.y = 0; ou posicaoMiraJogador.y = 0; - Vou colocar abaixo o código do meu projeto e o código que eu peguei de tópicos similares, mas que acabaram gerando o outro bug.

Código que eu estou usando atualmente, igual o da aula:

public class MovimentoJogador : MovimentoPersonagem
{
    public void RotacaoJogador(LayerMask MascaraChao)
    {
        Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);

        RaycastHit impacto;

        if (Physics.Raycast(raio, out impacto, 100, MascaraChao))
        {
            Vector3 posicaoMiraJogador = impacto.point - transform.position;

            posicaoMiraJogador.y = 0;

            Rotacionar(posicaoMiraJogador);

        }
    }
}

Código de outros tópicos com que resolve o problema de desalinhamento de mira, mas que acabou gerando outro bug de rotacionar meu personagem no eixo Y quando a mira está em cima dele, mesmo com localColisao.y = 0; e com a rotação no eixo Y bloqueada no Inspector do Jogador:

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

float distanciaColisao;

Plane plano = new Plane(Vector3.up, posicaoMira.transform.position);

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);
}
3 respostas
solução!

Oi, Guilherme, blz?

No caso da troca para o plano o ideal é que o localColisao fique no transform.position.y porque assim fica com o plano na posição exata do eixo do personagem evitando a rotação em Y.

Pode ver se isso resolve o problema? Bons estudos!

Corrigiu, professor!!! Muito Obrigado :)

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