1
resposta

[Sugestão] NullReference em GameManager.Instance.InputManager.OnAttack

Pessoal, como forma de ajudar qem estiver com o mesmo problema...

Tive problema ao manter dentro de Awake() as assinaturas dos eventos. Tomei um monte de NullReference. Por isso, transferir essa parte do código para Start()

Trecho do meu PlayerAnim.cs

void Awake()
    {
        animator = GetComponent<Animator>();
        isGroundedChecker = GetComponent<IsGroundedChecker>();
        playerHealth = GetComponent<Health>();
    }

    void Start()
    {
        if (playerHealth != null)
        {
            playerHealth.OnHurt += PlayHurtAnim;
            playerHealth.OnDead += PlayDeadAnim;
        }

        if (GameManager.Instance != null && GameManager.Instance.InputManager != null)
        {
            GameManager.Instance.InputManager.OnAttack += PlayAttackAnim;
            Debug.Log("OnAttack inscrito com sucesso");
        }
        else
        {
            Debug.LogError("GameManager ou InputManager não disponível no Start");
        }
    }

    void OnDestroy()
    {
        if (playerHealth != null)
        {
            playerHealth.OnHurt -= PlayHurtAnim;
            playerHealth.OnDead -= PlayDeadAnim;
        }

        if (GameManager.Instance != null && GameManager.Instance.InputManager != null)
        {
            GameManager.Instance.InputManager.OnAttack -= PlayAttackAnim;
        }
    }
1 resposta

Oi, Matheus! Tudo bem?

Muito obrigada por compartilhar essa solução com a comunidade. Esse é um ponto que costuma gerar bastante dúvida em quem está começando com Unity, e sua explicação toca exatamente na ferida do ciclo de vida dos scripts.

Parabéns pela proatividade em documentar o erro e a solução! Isso ajuda muito no aprendizado coletivo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!