Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Parameter 'Movendo 0' does not exist

Apos tentar rodar o jogo depois do termino da aula apareceu no inspector esse problema: Parameter 'Movendo 0' does not exist. UnityEngine.Animator:SetFloat (string,single) AnimacaoPersonagem:Movimentar (single) (at Assets/Scripts/AnimacaoPersonagem.cs:21) ControlaInimigo:FixedUpdate () (at Assets/Scripts/ControlaInimigo.cs:33)

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 valorDeMovimento) 
{
    meuAnimator.SetFloat("Movendo 0", valorDeMovimento);
}

}

public class ControlaInimigo : MonoBehaviour, IMatavel { public GameObject Jogador; private MovimentoPersonagem movimentoInimigo; private AnimacaoPersonagem animacaoInimigo; private Status statusInimigo; public AudioClip SomDeMorte; private Vector3 posicaoAleatoria; private Vector3 direcao; private float contadorVagar; private float tempoEntrePosicoesAleatorias = 4;

void Start()
{
    Jogador = GameObject.FindWithTag("Jogador");
    animacaoInimigo = GetComponent<AnimacaoPersonagem>();
    movimentoInimigo = GetComponent<MovimentoPersonagem>();
    AleatorizarZumbi();
    statusInimigo = GetComponent<Status>();
}

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

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

    movimentoInimigo.Rotacionar(direcao);

    if (distancia > 15)
    {
        Vagar();
    }

    else if (distancia > 2.5)
    {
        movimentoInimigo.Movimentar(direcao, statusInimigo.Velocidade);

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

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

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

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

    return posicao;
}

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

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

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

}

3 respostas

Oi, Juliano, isso parece dizer que parametro Movimentar 0 não existe lá no Animator, confere lá o nome do parâmetro e o tipo dele. Qualquer coisa manda um print do seu animator do zumbi e jogador, lembrando que o parâmetro teria que ter o mesmo nome e tipo nos dois, já que estamos reutilizando.

O primeiro problema foi arrumado. Porem, os zumbis ainda não ficam em idle quando param (mesmo fazendo os codigos iguais dos da aula). Sei que isso não afeta muito no jogo, mas tem um jeito de consertar?

solução!

Eles param mas continuam andando, é isso? Se é isso dá uma olhada na transição da animação de andar pra Idle, ela pode estar ao contrário.