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

[Bug] NullReferenceException Não conseguir identificar

Verifiquei tudo fiz e refiz e não entendi o porquê do erro. Não enviei tudo de cada script por que não coube.

Erro:

NullReferenceException: Object reference not set to an instance of an object BossBehaviour.StartChasing () (at Assets/Scripts/Enemy/Boss/BossBehaviour.cs:118) GameManager.ActivateBossBehaviour () (at Assets/Scripts/GameManager.cs:80) BossFightTrigger.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/Scripts/Devices/BossFightTrigger.cs:13)

No BossBehaviour:
    public void StartChasing()
    {
        _Animator.SetBool("CanChase", true);
    }

No GameManager:
    [Header("Dynamic game objects")]
    [SerializeField] private GameObject bossGate;
    [SerializeField] private PlayerBehavior _PlayerBehaviour;
    [SerializeField] private BossBehaviour _BossBehaviour;
    [SerializeField] private BossFightTrigger _BossFightTrigger;
    private void Awake()
    {
        if (Instance != null) Destroy(this.gameObject);
        Instance = this;

        _inputManager = new InputManager();

        TotalKeys = FindObjectsOfType<CollectableKey>().Length;
        _UIManager.UpdateKeysLeftText($"{KeysCollected}/{TotalKeys}");
        
        _BossFightTrigger.OnPlayerEnterBossFight += ActivateBossBehaviour;
    }
    private void ActivateBossBehaviour()
    {
        _BossBehaviour.StartChasing();
    }

No BossFightTrigger:
using System;
using UnityEngine;

[RequireComponent(typeof(BoxCollider2D))]
public class BossFightTrigger : MonoBehaviour
{
    public event Action OnPlayerEnterBossFight;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if(other.CompareTag("Player"))
        {
            OnPlayerEnterBossFight?.Invoke();
        }
    }
}

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

2 respostas
solução!

Olá Bruno! Tudo bem?

Esse erro NullReferenceException geralmente ocorre quando você tenta acessar um objeto que não foi inicializado. Vamos verificar alguns pontos que podem ajudar a resolver o problema:

  1. Verifique as Referências no Inspector:

    • Certifique-se de que o BossBehaviour, BossFightTrigger e outros objetos referenciados no GameManager estão corretamente atribuídos no Inspector. Parece que você já fez isso, mas vale a pena conferir novamente.
  2. Inicialização do Animator:

    • No método StartChasing do BossBehaviour, o _Animator pode não estar inicializado. Verifique se o Animator está corretamente atribuído no script. Por exemplo, se você estiver usando GetComponent<Animator>(), certifique-se de que ele está sendo chamado no Start ou Awake do BossBehaviour.
  3. Verifique o Evento:

    • Assegure-se de que o evento OnPlayerEnterBossFight está sendo corretamente disparado e que o GameManager está inscrito nesse evento antes de ele ser chamado.
  4. Ordem de Execução:

    • Verifique a ordem de execução dos scripts para garantir que o BossBehaviour e outros componentes necessários estejam prontos antes de serem acessados.

Essas verificações devem ajudá-lo a identificar onde o problema está ocorrendo.

Espero ter ajudado e bons estudos!

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

Obrigado. Achei onde errei. Por algum motivo eu coloquei o _Animator = GetComponent<Animator>(); no método errado e não percebi.