6
respostas

erro/duvida

Usei o código abaixo criando um parâmetro de correr e não dá certo. somente com a tecla "I" ele muda de animação. Com as outras teclas para dar movimento de correndo não funciona a animação. Apenas move o personagem na animação parado/idle. O que fazer para corrigir?

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");
        float eixoY = Input.GetAxis("Vertical1");

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


    transform.Translate(direcao * Velocidade * Time.deltaTime);

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


        if (Input.GetKey(KeyCode.P))
        {
        GetComponent<Animator>().SetBool("Correndo", true);
        transform.Translate(Vector3.forward*Time.deltaTime*10);

        }
        else
        {
        GetComponent<Animator>().SetBool("Correndo", false);
        }



        if (Input.GetKey(KeyCode.L))
        {
        GetComponent<Animator>().SetBool("Correndo", true);
        transform.Translate(Vector3.back * Time.deltaTime * 10);

        }
        else
        {
            GetComponent<Animator>().SetBool("Correndo", false);
        }



        if (Input.GetKey(KeyCode.O))
        {
        GetComponent<Animator>().SetBool("Correndo", true);
        transform.Translate(Vector3.right * Time.deltaTime * 10);

        }
        else
        {
            GetComponent<Animator>().SetBool("Correndo", false);
        }



        if (Input.GetKey(KeyCode.I))
        {
        GetComponent<Animator>().SetBool("Correndo", true);
        transform.Translate(Vector3.left * Time.deltaTime * 10);

        }
        else
        {
            GetComponent<Animator>().SetBool("Correndo", false);
        }
    }

}

6 respostas

Consegui fazer o processo funcionar com o código abaixo. Tem outra forma de criar o código para fazer o mesmo processo?

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

        float eixoY = Input.GetAxis("Vertical1");
        float eixoU = Input.GetAxis("Vertical2");

        Vector3 direcao = new Vector3(eixoX, 0, eixoZ);
        Vector3 correr = new Vector3(eixoY, 0, eixoU);


    transform.Translate(direcao * Velocidade * Time.deltaTime);
    transform.Translate(correr * Velocidade * Time.deltaTime);

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


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

}

Oi, Bruno, tudo bem?

Você pode utilizar o Animator pra criar uma transição de animação de andar pra correr usando um float com as condições

Idle -> quando a Velocidade (variável criada no Animator como float) é maior que 0.1 troca pra Andar Andar -> quando a Velocidade é maior que 5 (exemplo de número) troca pra Correr

Aí no código do Animator você pode usar o SetFloat pra setar a variável "Velocidade" do Animator para o valor da variável Velocidade do seu script.

Aí quando você segurar Shift por exemplo você aumenta o valor da Velocidade do seu script para algo como 10 e o Animator vai fazer a troca sozinho.

Deu pra entender?

Posso montar um exemplo se você quiser me mandar seu projeto em .zip no Dropbox, Google Drive, etc. Só colocar o link aqui.

Olá Henrique, Valeu pelo comentário!

Acho que entendi a sua lógica, porém não sei se consigo operacionalizar isto usando os parâmetros da animação e inserindo as devidas variáveis no código.

Desculpe a ignorância, mas o que é ".zip no Dropbox, Google Drive?

Você vai comprimir a pasta do seu projeto em um arquivo .zip que é a mesma forma que você recebeu o projeto no inicio do curso.

Então você pode subir esse arquivo num serviço especializado em guardar dados como o Dropbox, Google Drive, We Transfer, etc...

Depois é só colar o link aqui pra termos acesso e poder baixar o seu projeto.

Olá Henrique, Bom?!

Vê se consegue acessar o link abaixo. Tentei fazer pelo google drive. https://drive.google.com/file/d/1zlzcV_Sn5FW5ewgzZNwVhdy6kbH5GlR5/view?usp=sharing

Valeu!

Oi, Bruno, gerei um projetinho aqui: https://drive.google.com/file/d/13Lwt6u0KTeZ7cHjf8y9Jrbe3E6MOiYgA/view?usp=sharing

Não recomendo você usar o meu mas sim usá-lo como referência para fazer o seu.

Passando um pouco do que fiz:

  • Defini no Animator uma variável do tipo float e fiz as amarrações necessárias para as transições que você queria.

  • Mudei um pouco a sua lógica de eixos pra facilitar principalmente na hora de te devolver. Fiz algo simples, apertou o Shift a velocidade aumenta.

  • Multipliquei o Vetor velocidade pela magnitude do Vetor de movimento, assim a velocidade quando não apertamos nada vale 0 e quando estamos nos movendo ela vale o valor pré definido (7 ou 10)

A magnitude é o tamanho do Vetor na Física e logo vamos ter uma discussão bem legal sobre isso no curso e sobre a normalização que tive que usar.

  • Atribui o valor dessa da velocidade para o float que defini no Animator.

Obviamente temos como simplificar esse código e quando você avançar nas próximas partes do curso vai ter uma ideia de como fazer então por enquanto tornei bem simples e logo você pode melhorá-lo.

Se tiver outras dúvidas estamos por aqui.

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