Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

travou tudo

Nao consigo movimentar o jogador, antes ele continuava atravessando paredes e zumbis e chao, agora esta parado mesmo depois de ter copiado todo o codigo.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControlaJogador : MonoBehaviour
{

    public float Velocidade = 10;

    // Update is called once per frame
    void Update()
    {

        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

        Vector3 direcao = new Vector3(eixoX, 0, eixoZ);

        GetComponent<Rigidbody>().MovePosition
        (GetComponent<Rigidbody>().position +
                (direcao * Velocidade * Time.deltaTime));

        if (direcao != Vector3.zero)
        {
            GetComponent<Animator>().SetBool("Movendo", true);
        }
        else
        {
            GetComponent<Animator>().SetBool("Movendo", false);
        }

    }
}
1 resposta
solução!

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.