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

[Dúvida] Procurei e tentei, mas não deu certo :(

Oi, bom dia! Então, fiquei meia hora testando, mas nada deu certo até agora. Resolvi apelar aqui, kkkkk. Estou com esse erro aparecendo, e não importa o que aconteça, se eu mudo o nome, ele buga outros 2, e se eu mudar os outros 2, ele buga 1. Aí volta esse mesmos bugs. Então, estou bem perdido até para explicar direito, kkkkk. Aqui está a imagem:

Erro da Unity.

Tô mandando já o projeto todo para vocês avaliarem. Talvez seja a minha Unity que está na versão mais recente, e talvez esteja bugando tudo, mas no fim não faço ideia.

Link: https://drive.google.com/drive/folders/1NIrGnRiGHrgarSNGa5aCgX6xIHrtq0kM?usp=sharing

E eu não sei se isso é um bug que pode atrapalhar. Mas se entrar no ícone do jogador, nós scripts que estão com esse erro diferente tipo estão meio que faltando, eu não faço ideia. Então, é um problema que não sei se preciso me preocupar quando iniciar a próxima aula da formação. E, caso queira saber e para não ter que explicar tudo de novo como nas 3 últimas perguntas que fiz, kkkk, vou resumir: perdi meu projeto original e peguei a aula final do curso e, por isso, não tenho noção dos bugs que não fiz, kkkk. Aqui a imagem:

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

E, infelizmente, quando aperto o botão para iniciar a gameplay pra testar, não funciona. Então, acabou atrapalhando kkkkk.

Obs: Eu já fiz isso com antecedência, cliquei no icone do jogo e foi isso que me apareceu. Caso haja dúvida kkkkk.

17 respostas

Oi Pedro, tudo certo?

Pela primeira imagem que você mandou, me parece que voltou um problema de uma dúvida anterior que você postou por aqui. A solução aqui vai ser a mesma e você pode seguir as instruções do outro post:

https://cursos.alura.com.br/forum/topico-duvida-nao-consigo-corrigir-esse-erro-que-ocorreu-com-o-jogo-311526

É aquela ideia que uma interface não pode ter modificador de acesso (public) e não pode ter as implementações dos métodos. Isso vai ficar nas classes que implementarem a interface IMatavel.

Na segunda imagem é provável que tenha relação com o primeiro problema. Se a classe não está compilando então a Unity não consegue associar os scripts. Tenta corrigir a primeira parte primeiro e depois verifica novamente o Jogador. Se continuar dando erro nele, aí provavelmente deve aparecer uma outra mensagem de erro que vai guiar a gente pra encontrar a solução.

Boa tarde, ok, corrigi e segui direitinho a sua instrução passada. E parece que arrumou o meu último problema kkkkk. Mas apareceu isso agora. Sumiu 2 erros, apareceu outro dessa vez kkkkk.

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

o código e praticamente o mesmo mas usando a solução da minha dúvida passada.

Boa tarde Pedro!

Pela mensagem de erro parece que ele tá procurando por um tipo MovimentoPersonagens mas no nosso código o tipo que foi criado se chama MovimentoPersonagem. Dá uma verificada na linha 9 da sua classe ControlaInimigo.cs, e só confirma se o nome dessa classe tá correto.

O correto deveria ser:

    private MovimentoPersonagem movimentaInimigo;

Então, apareceu mil problemas(8) kkkkkk.

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

Acho que o problema é bem parecido com o anterior, tem a ver com o nome de uma variável que deve estar diferente.

Na classe ControlaInimigo.cs dentro do método TomarDano você tem que trocar a variável status pela variável statusInimigo que é o nome que foi usado na declaração dela no início desse arquivo. Então o método ficaria assim:

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

mudei, mas parece que que foi adicionado mais 2 erros kkkkkk.

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

Pedro, consegue compartilhar essa versão mais atual do seu projeto comigo, por favor?

Eu imagino que é alguma coisa pequena mas como os arquivos todos se conectam, acaba parecendo que são vários erros pq se um não funciona todos outros também dão problema.

Claro aqui: https://drive.google.com/drive/folders/1AbUtp_3OBdlZM25DCaCWpEfSEzxoYva5?usp=sharing

Acho que só essa pastas já servem certo? kkkkkk.

Boa, servem sim. Eu vou dar uma testada aqui na minha máquina e depois volto pra te indicar o que eu consegui encontrar.

Um que já encontrei aqui foi na classe Bala.cs. Onde tá escrito:

    if (objetoDeColisao == "Inimigo" )

Deveria ser:

    if (objetoDeColisao.tag == "Inimigo" )

Eu vou olhar as classes restantes e te aviso se tiver mais coisas pra corrigir.

Belê, valeu pela paciência kkkkk tmj, então peço desculpa por isso mas infelizmente vou ter que sair agora tenho um compromisso se de eu respondo ainda hoje ou só amanhã mesmo =/ mas já agradeço pela ajuda e compreensão e pelo tempo gasto comigo valeu mesmo.

Sem problemas! Já revisei aqui e tem várias alterações pra serem feitas no projeto. Vou colocar aqui as alterações arquivo por arquivo:

1. ControlaJogador.cs

Linha 21: Onde tá escrito animacaoPersonagem deveria ser AnimacaoPersonagem

        animacaoJogador = GetComponent<AnimacaoPersonagem>();

Linha 57: Onde tá escrito statusInimigo deveria ser statusJogador

        statusJogador.Vida -= dano;

Linha 60: Onde tá escrito statusInimigo deveria ser statusJogador

        if(statusJogador.Vida <= 0)

2. Bala.cs

Linha 25: Onde tá escrito objetoDeColisao deveria ser objetoDeColisao.tag

    if (objetoDeColisao.tag == "Inimigo" )

3. ControlaInimigo.cs

Linha 16: Onde tá escrito animacaoPersonagem deveria ser AnimacaoPersonagem

        animacaoInimigo = GetComponent<AnimacaoPersonagem>();

Linha 34: Onde tá escrito movimentaInimigo.Movimentar* deveria ser movimentaInimigo.Movimentar (só tirar o asterisco * )

            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);

Linha 56: Onde tá escrito _dano deveria ser dano (só tirar o underscore _ )

    public void TomarDano(int dano)

Linha 58: Onde tá escrito status deveria ser statusInimigo

    statusInimigo.Vida -= dano;

Linha 59: Onde tá escrito status deveria ser statusInimigo

    if(statusInimigo.Vida <= 0)

Com isso o projeto rodou aqui na minha máquina. Muita atenção na hora de fazer as alterações porque você já deve ter percebido que uma letrinha a mais em maiúscula ou minúscula pode gerar um monte de bugs, tá bom?

Então parece que esses erros foram corrigidos, mas agora quando tentei testar, apareceu esse erro e o jogo pausou:

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

E desculpa por não ter respondido mais cedo, acabou que essa semana foi corrida para mim malz.

Oi Pedro, tudo bem?

Pelo que li na thread até aqui vc conseguiu corrigir muitos dos erros, muito bom! Provavelmente a maioria deles tem relação com vc ter pego o projeto que liberamos no curso e abrir em uma versão mais nova da Unity mesmo.

Com relação a esse último que vc postou ele está ligado com a imagem que vc colocou la no começo:

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

Pelo que a imagem mostra, na hora que vc carregou o projeto a Unity não conseguiu achar as referências para os Scripts que foram adicionados ao Game Object "Jogador". Nesse caso o melhor é vc apagar esses scripts que estão com essa referência faltando e readicionar o ControlaJogador.cs e MovimentoJogador.cs como scripts desse GameObject.

Além disso, vc tem um erro de NullReferenceException na sua classe ControlaInterface. Provavelmente é algum atributo dela que vc deve ter esquecido de referenciar pelo inspetor da Unity. Se não for isso, pode ser pq na classe ControlaInterface.cs temos a linha:

void Start(){
    scriptControlaJogador = GameObject.findWithTag("Jogador").getComponent<ControlaJogador>();
    
    ...
}

Nessa linha o script da interface está procurando o componente ControlaJogadorque deveria existir dentro do seu GameObject jogador, mas como vimos, esse foi um dos scripts que a Unity perdeu a referência na hora de ler o projeto e por isso ele volta um Null e vc recebe o erro de NullReferenceException

Oi, bom dia! Então, fui na minha Unity para verificar novamente se ainda estava com esse erro. As referências estão lá, aqui a imagem:

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

Mas eu não tenho certeza se deveria ter, mas esses scripts precisariam ter alguma referência ou é assim mesmo?.

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

É aqui estão um dos erro pra vcs verem com mais detalhes. E desculpe por não ter mandando na minha última resposta lá em cima.

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

Nesse ultimo erro o que ele diz é que está faltando o componente GUI Layer na câmera do jogo. Esse é um componente padrão que normalmente é criado junto com a câmera do jogo. Deve ter algum erro por causa da versão tbm. provavelmente é só adicionar ele que o jogo volta a funcionar.

Então , como faço isso kkkkkkkkk, infelizmente não sei como adicionar isso na câmera do jogo. Tipo eu procurei mas não achei nda que remetesse a GUI Layer.

solução!

Oi Pedro, tudo bem? Tem 2 jeitos de vc fazer isso. Um é selecionar a câmera do jogo e ir em adicionar componente. https://docs.unity3d.com/2018.3/Documentation/Manual/UsingComponents.html

O Componente de GUi Layer deve estar na aba de renderização.

Outra maneira de arrumar é vc deletar a câmera e pedir pra Unity adicionar uma nova