Oi
Pelo contexto que você compartilhou, parece que o problema está relacionado à física do jogador. Na Unity, quando queremos que os objetos colidam uns com os outros, é necessário adicionar um componente de física a pelo menos um dos objetos. No caso do jogador, é necessário adicionar o componente "Rigidbody" para que ele possa colidir com outros objetos.
Você pode adicionar o componente "Rigidbody" ao jogador clicando em "Add Component > Physics > Rigidbody" no Inspector. Após adicionar o componente, você verá que o jogador não atravessa mais as paredes, mas pode tombar e começar a girar aleatoriamente ao colidir com outros objetos.
Para evitar que o jogador gire aleatoriamente, você pode configurar as restrições de rotação do "Rigidbody". No Inspector, marque as caixas de seleção dos três eixos em "Freeze Rotation" para impedir que a física rotacione o jogador.
No entanto, ao fazer isso, você pode perceber que o jogador cai ao sair do perímetro do cenário. Para evitar que isso aconteça, você pode marcar a caixa de seleção do eixo Y em "Freeze Position" e garantir que "Use Gravity" esteja ativado no "Rigidbody". Dessa forma, o jogador não cairá mais pelo cenário.
Agora, em relação à movimentação do jogador, acredito que o problema esteja relacionado ao uso do transform.Translate
no código. Para resolver isso, você pode usar a física para mover o jogador em vez do transform
. No código que você compartilhou, substitua a linha transform.Translate()
por:
GetComponent<Rigidbody>().MovePosition(GetComponent<Rigidbody>().position + (direcao * Velocidade * Time.deltaTime));
Certifique-se de que essa linha esteja dentro do método Update()
. Após fazer essa alteração, teste o jogo novamente e verifique se o jogador consegue se mover corretamente.
Se ainda assim o jogador não estiver se movendo corretamente, sugiro verificar se as variáveis eixoX
e eixoZ
estão recebendo os valores corretos dos eixos horizontal e vertical do input.