Bom dia!
Sim, esse erro provavelmente está relacionado a algo que ficou faltando configurar na Unity, e não diretamente ao código C#.
O erro:
NullReferenceException: Object reference not set to an instance of an object
na linha: GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;
significa que algum dos objetos da cadeia GameManager.Instance.InputManager
está null
no momento em que essa linha é executada.
O GameManager
está presente na cena?
- Ve se o objeto que contém o script
GameManager
está na Hierarquia da cena no momento da execução. - Se ele for um singleton, ele precisa existir na cena antes de qualquer outro objeto que tente acessá-lo.
O Instance
do GameManager
está corretamente atribuído?
Dentro do GameManager
, você deve ter algo como:
public static GameManager Instance;
void Awake()
{
if (Instance == null)
Instance = this;
else
Destroy(gameObject);
}
- Essa linha
Instance = this;
precisa ser chamada no Awake()
antes que outros scripts acessem o GameManager
.
O InputManager
está atribuído no GameManager?
Dentro do GameManager
, normalmente você tem algo como:
public InputManager InputManager;
- Confirme se esse campo
InputManager
foi arrastado no Inspector da Unity. - Se estiver
null
, o erro vai ocorrer exatamente como você relatou.
No Inspector:
- Selecione o objeto
GameManager
na Hierarquia. - Veja se o campo
InputManager
aparece. - Arraste para ele o GameObject que contém o script
InputManager
.
Abraços.