3
respostas

[Bug] Bug no código da Unity CS0122

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

o erro me impede de dar play na unity e o código do erro é enorme não sei de forma alguma onde esta o erro.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
apareceu muitos erros de forma repentina na minha unity.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Olá Yuri! COmo vai?

O erro CS0122 geralmente ocorre quando você tenta acessar um membro de classe que está inacessível devido ao seu nível de proteção. No seu caso, parece que o atributo FormerlyPrefKeyAsAttribute está inacessível.

Aqui estão algumas dicas para resolver esse problema:

  1. Verifique a Acessibilidade: Certifique-se de que o atributo ou método que você está tentando acessar é público. Se ele estiver declarado como private ou internal, você não conseguirá acessá-lo de fora da classe ou do assembly.

  2. Referências Corretas: Verifique se todas as suas referências de biblioteca estão corretas. Às vezes, esse erro pode ocorrer se você não tiver a referência correta para uma biblioteca necessária.

  3. Namespace Correto: Verifique se você está usando o namespace correto onde o FormerlyPrefKeyAsAttribute está definido. Adicione using no topo do seu script, se necessário.

  4. Limpeza e Recompilação: Tente limpar e recompilar seu projeto. No Visual Studio, você pode fazer isso indo em "Build" > "Clean Solution" e depois "Build" > "Rebuild Solution".

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

nao deu certo, e nao achei nenhum "Build" no VS, pode sim ser um erro de acessibilidade, mas chequei o código inteiro do SpriteFrameModule.cs e nada, acredito que tenha corrompido mesmo, a unica solução que vejo é apagar a pasta do robotSprites e começar denovo. Alguma outra solução alem dessas?

Oi, Yuri!

O CS0122 costuma estourar quando um script de runtime tenta usar algo somente do Editor ou interno. O culpado comum nesse caso é o atributo FormerlyPrefKeyAsAttribute, que é interno do UnityEditor.SettingsManagement (não acessível em runtime). Faça o seguinte, de forma direta:

1) Se esse atributo está no seu código, troque por um equivalente público de runtime
Use FormerlySerializedAs (serve para manter a serialização após renomear campos). No topo do script, importe o namespace e ajuste o campo:

using UnityEngine;
using UnityEngine.Serialization;

public class SpriteFrameModule : MonoBehaviour
{
    // Antes (inválido em runtime):
    // [FormerlyPrefKeyAs("old_key")]  // atributo interno/Editor

    // Depois (válido em runtime):
    [FormerlySerializedAs("oldKey")]
    public string newKey;
}

2) Se precisar mesmo usar algo do Editor, isole-o
Coloque o código em uma pasta Editor/ ou envolva com diretivas de compilação. Assim o runtime não tenta compilar:

#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SettingsManagement;

public static class EditorOnlyStuff
{
    [FormerlyPrefKeyAs("old_key")]
    public static string EditorSettingKey = "new_key";
}
#endif

3) Se você usa .asmdef, garanta que o assembly é só do Editor
Abra o .asmdef do script que usa o atributo e marque a plataforma Editor. Exemplo mínimo:

{
  "name": "MyEditorAssembly",
  "includePlatforms": ["Editor"],
  "references": [
    "UnityEditor.SettingsManagement"
  ]
}

4) Reimport/limpeza para corrigir erros “em cascata” sem apagar seus assets

  • Feche a Unity e o VS.
  • Apague as pastas Library, Temp, obj e a pasta .vs da solução.
  • Abra o projeto na Unity para recompilar do zero.
  • No Package Manager, clique em Refresh (ícone de recarregar) e verifique se não há erros de pacote.

5) Sobre “apagar robotSprites e começar de novo”
Antes de deletar assets, faça Reimport apenas nessa pasta:

  • Botão direito em robotSprites/Reimport.
    Isso resolve meta-corrupt ou importadores travados sem perder trabalho.

6) Dica rápida caso o erro esteja em SpriteFrameModule.cs
Se outro script tenta acessar membros privados dele, torne-os public (ou internal no mesmo assembly). Exemplo:

public class SpriteFrameModule : MonoBehaviour
{
    // Se outro script precisa ler:
    public int frameCount;

    // Se precisa chamar:
    public void ApplyFrame(int index) { /* ... */ }
}

Resumo do que fazer agora (ordem prática):

  1. Substitua FormerlyPrefKeyAsAttribute por FormerlySerializedAs ou mova o código para Editor/ com #if UNITY_EDITOR.
  2. Se usar .asmdef, marque Editor e adicione a referência necessária.
  3. Feche Unity, apague Library/Temp/obj/.vs, reabra o projeto.
  4. Reimport da pasta robotSprites/ se o problema persistir.
  5. Abra o primeiro CS0122 na Console e confirme que sumiu.

Fico à disposição.