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

[Dúvida] Parameter type 'Movendo' does not match. UnityEngine.Animator:SetFloat (string,single) AnimacaoPersonagem:Movimentar (single) (at Assets/scripts/AnimacaoPersonagem.cs:21)

Olá, está ocorrendo um erro nos códigos "AnimacaoPersonagem" e "controlarJogador" fazendo aparecer "Parameter type 'Movendo' does not match". Além de aparecer infinitas mensagens, a personagem não para de andar e fazer o som do passo.

Aqui está o meu código⇩ AnimacaoPersonagem ` using System.Collections; using System.Collections.Generic; using UnityEngine;

public class AnimacaoPersonagem : MonoBehaviour { public Animator meuAnimator;

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

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

public void Movimentar(float estado)

{

meuAnimator.SetFloat("Movendo", estado);

}

public void Morrer ()
{
    meuAnimator.SetTrigger("Morrendo");
}

}

***controlarJogador*** using System.Collections; using System.Collections.Generic; using UnityEngine;

public class controlarJogador : MonoBehaviour, IMatavel, ICuravel {

private Vector3 direcao;
public LayerMask MascaraChao;
public GameObject TextoGameOver;
public ControlarInterface scriptControlarInterface;
public AudioClip SomDeDano;
private MovimentoJogador meuMovimentoJogador;
private AnimacaoPersonagem animacaoJogador;
public Status statusJogador;

void Start()
{
    Time.timeScale = 1;
    meuMovimentoJogador = GetComponent <MovimentoJogador>();
    animacaoJogador = GetComponent<AnimacaoPersonagem>();
    statusJogador = GetComponent<Status>();
}

// Update is called once per frame

void Update()

{

animacaoJogador.Movimentar(meuMovimentoJogador.Direcao.

magnitude);

}

void FixedUpdate()
{
    meuMovimentoJogador.Movimentar(statusJogador.Velocidade);

    meuMovimentoJogador.RotacaoJogador();
}    

//faz o Jogador tomar dano do zumbi
public void TomarDano(int dano)
{
    statusJogador.Vida -= dano;  
    scriptControlarInterface.AtualizarSliderVidaJogador();

    ControlarAudio.instancia.PlayOneShot(SomDeDano);

    if (statusJogador.Vida <= 0)
    {
        Morrer();
    }
}

//faz o Jogador morrer e aparecer as interfaces
public void Morrer ()
{
    scriptControlarInterface.GameOver();
}

public void CurarVida (int quantidadeDeCura)
{
    statusJogador.Vida += quantidadeDeCura;
    if(statusJogador.Vida > statusJogador.VidaInicial)
    {
        statusJogador.Vida = statusJogador.VidaInicial;
    }
    scriptControlarInterface.AtualizarSliderVidaJogador();
}

}

/GetComponent().MovePosition (GetComponent().position + (statusJogador.Velocidade * Time.deltaTime * direcao));/ ` Espero que possam me ajudar a resolver este problema, para que eu possa continuar minha formação neste curso. Bom dia a todos.

3 respostas

Ola! Vc está tentando chamar o método Movimentar da classe AnimacaoPersonagem a partir do método Update da classe controlarJogador. O problema parece estar no tipo de parâmetro que você está passando para o método Movimentar.

nISSO aqui:


public void Movimentar(float estado)
{
    meuAnimator.SetFloat("Movendo", estado);
}


void Update()
{
    animacaoJogador.Movimentar(meuMovimentoJogador.Direcao.magnitude);
}

O método Movimentar quer um parâmetro do tipo float, mas meuMovimentoJogador.Direcao.magnitude está retornando um tipo diferente. Verifcao tipo de retorno de meuMovimentoJogador.Direcao.magnitude para q seja um float.

Se Direcao.magnitude não retorna um float, você precisará converter para float explicitamente.

pode fazer isso usando (float)meuMovimentoJogador.Direcao.magnitude.

Então, o código em controlarJogador.cs precisa ficar assim:

void Update()
{
    animacaoJogador.Movimentar((float)meuMovimentoJogador.Direcao.magnitude);
}

Valeu!

Olá, muito obrigado pela sugestão, mas ainda não consegui resolver o erro. Porem, depois de algumas tentativas de resolver os códigos aparentemente vi que o "meuMovimentoJogador.Direcao.magnitude" já estava convertido em um floatInsira aqui a descrição dessa imagem para ajudar na acessibilidade . Esta imagem vai estar com uma baixa qualidade, mas nela eu estou com o cursor em cima da "magnitude" e está aparecendo "float Vector3.magnitude {get;} (na parte de baixo da mensagem) => Returns the length of this vector (Read Only)." O que me faz pensar que o erro realmente não está no "controlarJogador" mas sim no "AnimacaoPersonagem" . Consegui resolver o erro que aparece as mensagens de erro loucamente (fazendo um método chamado "ParametroParaAnimacao" onde eu tirei o "animacaoJogador.Movimentar((float)meuMovimentoJogador.Direcao.magnitude);" do Update e coloquei tudo neste método público (tabém criando um var para poder facilitar um pouco o código) e por fim coloquei isto no "Quando Mudar O Valor (Vector2)"). Se eu estivér errado em alguma coisa no que fiz, por favor me corrijam. Ainda aguardo nova solução, pois tenho que dá continuidade às aulas, que no momento estão paradas. Agradeço a todos que estão me ajudando.

solução!

Olá, eu agradeço a quem tentou me ajudar e eu fico feliz de dizer que eu consegui resolver o erro e foi uma coisa bem interessante, eu comecei a desconfiar de uma coisa que eu fiz a muito tempo na aba "Animator" na parte de "Parameters" no "Movendo", eu tinha colocado ele como um bool e era por isso que estava dando erro e depois de pensar um pouco eu decido colocar o "Movendo" como um float(pois eu pensei na hora que a personagem não anda de pixel em pixel por isso deduzi que o valor de seus movimentos e passos eram quebrados) ai depois de alguns erros(como a pesonagem andar só depois de um tempo e não parar mais) fui pesquisar um pouco e tive a seguinte resposta => (de "idle" para "correr")Conditions: Movendo Greater 0.01 ; (de "Correr" para "idle") => Conditions: Movendo Less 0.01 . E no script a alteração foi: public Animator AnimacaoDeTudo; public float estado;

public void Movimentar(float estado = 1.5f) { this.estado = estado; //Só por precaução AnimacaoDeTudo.SetFloat("Movendo", this.estado); }

Novamente eu agradeço pela a ajuda e eu espero que a resolução de meus erros possam ajudar outras pessoas com este mesmo erro ou parecido com ele, valeu e falou!