2
respostas

[Bug] Como modificar os valores do animator

eu estive tendo um problema com o animator onde ao inves de 0.1 ao 0.5 como no video do curso, mas sim entre 70.0 a 80.0, existe alguma maneira para me alterar e se sim, onde devo colocar a solução? Se preciso ver algum dos scripts me avise que eu mando.

2 respostas

Se os valores do Animator estão fora do esperado, pode ser que as propriedades de transição ou os parâmetros estejam configurados incorretamente. Verifique as configurações de transição no Animator Controller, principalmente os tempos de entrada e saída. E, no script, se você estiver setando valores para parâmetros, use algo como:

animator.SetFloat("nomeDoParametro", valorDesejado);

Se puder compartilhar o trecho relevante do código, posso ajudar de forma mais assertiva. Boa programação!

Opa, desculpa pela demora, vou tentar implementar este codigo que você me deu em um dos scripts, vou mandar os scripts que anima os personagens e o script que controla o inimigo caso ajude, ja que não sei exatamente em qual dos dois é o correto colocar. anima os personagens:

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

public class AnimacaoPersonagem : MonoBehaviour
{
    private Animator meuAnimator;

    void Awake()
    {
        meuAnimator = GetComponent<Animator>();
    }

   public void Atacar (bool estado)
    {
       meuAnimator.SetBool("Atacando", estado);
    }

   public void Movimentar (float valorMovimento)
    {
        meuAnimator.SetFloat("movendo", valorMovimento);
    }

}

controla o inimigo:

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

public class ControlaInimigo : MonoBehaviour, IMatavel
{

    public GameObject jogador;
    private Rigidbody rigidbodyInimigo;
    private MovimentoPersonagem movimentaInimigo;
    private AnimacaoPersonagem animacaoInimigo;
    private Status statusInimigo;
    private Vector3 posicaoAleatoria;
    private float posicaoAleatoriaTimer;
    private float tempoEntrePosicaoAleatoria = 4;
    private Vector3 direcao;
    public AudioClip SomZumbiMorte;

    // Start is called before the first frame update
    void Start()
    {
        jogador = GameObject.FindWithTag("Jogador");
        AleatorizarZumbi();
        rigidbodyInimigo = GetComponent<Rigidbody>();
        animacaoInimigo = GetComponent<AnimacaoPersonagem>();
        movimentaInimigo = GetComponent<MovimentoPersonagem>();
        statusInimigo = GetComponent<Status>();
    }

    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, jogador.transform.position);

        direcao = jogador.transform.position - transform.position;
        animacaoInimigo.Movimentar(direcao.magnitude);

        movimentaInimigo.Rotacionar(direcao);
        if (distancia > 15) 
        {
            Vagar();
        }
        else if (distancia > 2.5)
        {

            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);

            animacaoInimigo.Atacar(false);
        }
        else
        {
            animacaoInimigo.Atacar(true);
        }
    }

    void Vagar()
    {
        posicaoAleatoriaTimer -= Time.deltaTime;
        if (posicaoAleatoriaTimer <= 0)
        {
            posicaoAleatoria = AleatorizarPosicao();
            posicaoAleatoriaTimer += tempoEntrePosicaoAleatoria;
        }

        bool posicaoFinal = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
        if (posicaoFinal == false)
        {
            direcao = posicaoAleatoria - transform.position;
            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
        }
    }

    Vector3 AleatorizarPosicao ()
    {
        Vector3 posicao = Random.insideUnitSphere * 10;
        posicao += transform.position;
        posicao.y = transform.position.y;

        return posicao;
    }

        void Ataca ()
    {
        int dano = Random.Range(20, 30);
        jogador.GetComponent<ControlaJogador>().TomarDano(dano);
        
    }
    void AleatorizarZumbi ()
    {
        int gerarTipoZumbi = Random.Range(1, 28);
        transform.GetChild(gerarTipoZumbi).gameObject.SetActive(true);
    }

    public void TomarDano(int dano)
    {
        statusInimigo.HP -= dano;
        if(statusInimigo.HP <= 0)
        {
            Morrer();
        }
    }

    public void Morrer()
    {
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(SomZumbiMorte);
    }
 }