1
resposta

Problema em adicionar o Script "PlayerAnim"

Criei um novo arquivo C# dentro da pasta "Player" (dentro de Scripts e dentro de Assets), e meu código ficou exatamente como o código mostrado em aula:

using UnityEngine;

public class PlayerAnim : MonoBehaviour
{
private Animator animator;

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

private void Update()
{
    float moveDirection =
        GameManager.Instance.InputManager.Movement;
    transform.Translate(moveDirection *
    Time.deltaTime * moveSpeed, 0, 0);

    if (moveDirection < 0)
    {
        transform.localScale = new Vector3(-1, 1, 1);
    }
    else if (moveDirection > 0)
    {
        transform.localScale = Vector3.one
    }
}

}

Mas deu erro. Inicialmente a mensagem de erro dizia que o PlayerAnim não derivava de um MonoBehaviour, sendo que meu código continha o mesmo. Agora, depois de reiniciar minha máquina, o erro mudou para o mostrado na imagem. Como resolver? (Meus consoles estão ambos sem erro, tanto o da Unity quanto o do Visual Studio)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Bom dia, O erro da imagem (“Can’t add script… class cannot be found”)

Esse erro quase nunca é o problema real. Ele aparece quando:

  • o script não compilou
  • ou o nome do arquivo não bate com o nome da classe
  • ou existe qualquer erro de compilação em qualquer script do projeto, mesmo que não seja nesse arquivo

Quando isso acontece, a Unity simplesmente não “enxerga” a classe PlayerAnim, então ela diz que não consegue adicioná-la.

Ou seja: se a Unity não compilou tudo, ela não deixa adicionar script nenhum.

O código que você colou não está igual ao da aula, mesmo que pareça.

Erro 1 – Código de movimento no script errado

Na aula, o PlayerAnim NÃO tem código de movimento nem Translate.

Esse trecho não deveria estar no PlayerAnim:

float moveDirection =
    GameManager.Instance.InputManager.Movement;
transform.Translate(moveDirection *
Time.deltaTime * moveSpeed, 0, 0);

if (moveDirection < 0)
{
    transform.localScale = new Vector3(-1, 1, 1);
}
else if (moveDirection > 0)
{
    transform.localScale = Vector3.one
}

Esse código é do PlayerBehavior, não do PlayerAnim.

O PlayerAnim só controla animação, nada de movimento.

Erro 2 – moveSpeed não existe nesse script

No seu PlayerAnim, você usa:

Time.deltaTime * moveSpeed

Mas não existe nenhuma variável moveSpeed declarada nesse script.

Isso já é erro de compilação.

Erro 3 – Falta ponto e vírgula

Aqui também tem um erro de sintaxe:

transform.localScale = Vector3.one

Faltou o ; no final:

transform.localScale = Vector3.one;

Esse erro sozinho já impede a Unity de compilar tudo.

Como o PlayerAnim deve ficar de verdade

O PlayerAnim correto, como mostrado na aula:

using UnityEngine;

public class PlayerAnim : MonoBehaviour
{
    private Animator animator;

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

    private void Update()
    {
        bool isMoving = GameManager.Instance.InputManager.Movement != 0;
        animator.SetBool("isMoving", isMoving);
    }
}

Nada de Translate, nada de moveSpeed, nada de localScale.

O que fazer agora (passo a passo)

  1. Abra o script PlayerAnim

  2. Apague tudo relacionado a:

    • movimento
    • Translate
    • moveSpeed
    • localScale
  3. Deixe apenas o controle do Animator

  4. Salve o arquivo

  5. Volte para a Unity e aguarde a recompilação

  6. Veja se não aparece nenhum erro no Console

  7. Agora tente adicionar o PlayerAnim no Player novamente

Dica importante (pra evitar esse tipo de dor de cabeça)

  • Se a Unity não deixa adicionar um script, o problema não é o Inspector

  • É sempre erro de compilação

  • Mesmo que o Console esteja “limpo”, force:

    • salvar todos os scripts
    • ou reabrir a Unity

Abçs;