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

aonde esta o erro?

apos a ultima atualização ele agora fica parado ou corre porem nao sai do lugar

public class ControlaJogador : MonoBehaviour {

public float Velocidade = 10;
Vector3 direcao;

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

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

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

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

}

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

}

1 resposta
solução!

Olá

Analisando seu código:

public class ControlaJogador : MonoBehaviour {
    public float Velocidade = 10;
    Vector3 direcao;

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

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

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

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

Aparentemente, o código parece estar configurado para mover o jogador com base nas entradas do teclado, controlando a animação de movimento enquanto o jogador se move. Vamos verificar algumas coisas que podem estar causando o problema.

  1. Verifique os eixos de entrada: Certifique-se de que os eixos de entrada "Horizontal" e "Vertical" estejam configurados corretamente no Unity. Eles devem corresponder às teclas que você deseja usar para mover o jogador. Você pode verificar isso no menu "Edit" > "Project Settings" > "Input Manager."

  2. Verifique o componente Rigidbody: Certifique-se de que o objeto ao qual este script está anexado tenha um componente Rigidbody. O Rigidbody é necessário para aplicar física ao objeto e permitir seu movimento.

  3. Verifique a velocidade: Certifique-se de que a variável Velocidade tenha um valor maior que zero. Um valor muito baixo pode fazer com que o jogador se mova muito lentamente e pareça não se mover.

  4. Verifique a Animação: Certifique-se de que a animação "Movendo" esteja configurada corretamente no seu modelo 3D ou personagem. Se não estiver configurada corretamente, a animação pode não ser ativada ou desativada corretamente, o que afetaria a representação visual do movimento.

  5. Verifique o uso do FixedUpdate: No Unity, a movimentação física deve ser tratada no método FixedUpdate para garantir uma atualização consistente e suave. Verifique se você está usando corretamente o FixedUpdate para mover o jogador. Certifique-se de que o tempo entre chamadas de FixedUpdate seja constante.

Aqui está uma versão ligeiramente modificada do seu código com alguns comentários explicativos:

public class ControlaJogador : MonoBehaviour {
    public float Velocidade = 10;
    Vector3 direcao;

    void Update () {
        // Captura os inputs do teclado no método Update
        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

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

        // Define a animação com base na direção do movimento
        if(direcao != Vector3.zero)
        {
            GetComponent<Animator>().SetBool("Movendo", true);
        }
        else
        {
            GetComponent<Animator>().SetBool("Movendo", false);
        }
    }

    void FixedUpdate()
    {
        // Move o jogador usando o Rigidbody no método FixedUpdate
        GetComponent<Rigidbody>().MovePosition(GetComponent<Rigidbody>().position + direcao * Velocidade * Time.fixedDeltaTime);
    }
}

Agora, se você seguiu todas essas verificações e o problema persistir, é importante analisar outras partes do seu projeto, como a configuração do Unity e a interação com outros objetos no cenário. Às vezes, problemas de colisão ou configurações do terreno podem afetar o movimento do jogador.

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