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

Problema com a rotação do player

Olá! Estou tendo um problema com o projeto. O player não está rotacionando. Verifiquei o script várias vezes mas não estou conseguindo encontrar o erro. Se puderem me ajudar, ficarei muito grata!

Aqui um print de como esta meu script

11 respostas

Oi, Caroline, tudo bem?

Acho que o problema pode não ser no script, você configurou a mascara Floor? Tem que selecionar a camada do chão lá no Inspector senão o raio não tem com o que colidir.

Depois se quiser evoluir esse comportamento eu deixei uma dica nesse tópico

Configurei sim a mascara. O estacionamento esta na layer ”Floor” e no inspector do Player tambem adicionei essa camada na variavel que foi criada (public LayerMask Floor;). Tentei adicionar um plano, como tem no topico que voce sugeriu, mas tambem nao deu certo. Sera que por conta da posicao da camera? Esta assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

A posição da camera não deveria influenciar não. Conseguindo ver o chão e batendo com ele tá tudo bem.

Vamo testar a colisão dentro do if do Raycast coloca algo como:

Debug.Log(impacto.collider.gameObject.name);

Assim vai aparecer na janela de console (se não tiver aberto aperte ctrl + shift + c) o nome do objeto com o qual o raio esta colidindo e dê pra identificar algum problema.

Sobre o plano o código, acho que ele vai ficar mais claro um pouco a frente do curso quando você fizer a parte de atirar, mas fazendo uma adaptação ficaria algo assim dentro do FixedUpdate:

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

// colocar isso numa variável privada quando aprendermos sobre isso no curso 2 :)
Plane plano = new Plane(Vector3.up, transform.position);

float distanciaColisao;

if (plano.Raycast(ray, out distanciaColisao))
{
    Vector3 localColisao = raio.GetPoint(distanciaColisao);
    localColisao.y = 0; // zerando rotações em Y

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

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

Esse agora deve funcionar, mas acho que fazermos o antigo funcionar antes de evoluir é melhor, mas guarda ele pra que você possa estudar no futuro.

Localizei onde esta o problema, mas nao achei o erro. Minha verificação não está funcionando. O debug dentro do if não está rodando. Fiz o teste também de apenas printar uma frase, dentro da verificação também não funcionou, mas fora dela sim. Tentei refazer todo o codigo, mas ainda acontece o mesmo.

A movimentação está normal? E se tirar a mascara muda algo?

if(Physics.Raycast(raio, out impactor, 100))

Sim, de resto esta tudo normal... No inicio testei sem a mascara, ele virava as vezes e de forma bem brusca, agora com a mascara ele nao rotaciona nada.

Se quiser subir seu a pasta do seu projeto num arquivo .zip e colocar num Google Drive, Dropbox, ou algo assim, eu consigo dar uma olhada

Só lembra de colocar o compartilhamento como publico e esse link aqui :)

solução!

Oi, Caroline, tudo bem?

Conferi o projeto e o chão do estacionamento não tem um colisor, por isso que o raio não consegue colidir com ele. Se você adicionar um box collider deve funcionar, inclusive a parte das camadas :)

Bons estudos!

Nossa, nao acredito que deixei isso passar HAHAH

Muito obrigada pela ajuda e pela paciência!!