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);
}