On trigger enter not being called on start after instantiating (Video + Code)

Hi!
In my game, there are gates. You can shoot arrows to open them.
If you restart without saving, the gates will be there.
If you saved and restarted, the gates you opened shouldn’t be there.
So, to achieve this, I made a GateTrigger prefab, which doesn’t destroy on load and unlocks the gate on trigger enter.
By default, this GateTrigger prefab has its boxcollider2D enabled = false. If you save the game, this changes to true. (So that it only unlocks gates if you saved).

Nothing happens though. The OnTriggerEnter2D isn’t being called at all, even though the collision IS there.
The code is correct, because if I put the GateTrigger prefab manually on the scene, and hit play, it unlocks the gate.

On runtime, on the instantiated GateTrigger, if I move it, or disable and enable the trigger manually, the OnTriggerEnter2D is called.

I could fix it by making a timer and constantly disabling and enabling the GateTrigger prefab collider 2D, but that’s far from ideal.

What is going on?

Code of the GateTrigger prefab below:

Public class BlockadeTrigger : MonoBehaviour {

    private Blockade blockade;
    private GameObject blockadeTarget;
  
    // Use this for initialization
    void Start ()
    {
        DontDestroyOnLoad(gameObject);
      
    }
   
   

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("NormalWall")) //NormalWall = Gate
        {
           
            blockade = collision.GetComponent<Blockade>();
            blockade.mute();
            blockade.TargetsNumber = 0;
            blockade.CheckTargets();
            foreach (Transform child in collision.transform)
            {
                GameObject.Destroy(child.gameObject);
            }
          
        }     
    }
   
}

When you save the game, this is called:

oid AllowBarrierDestruction()
    {
        barrierTrigger = GameObject.FindGameObjectsWithTag("BarrierTrigger");
        foreach (GameObject trigger in barrierTrigger)
        {
            trigger.GetComponent<BoxCollider2D>().enabled = true;
        }
    }

I tried to change the OnTriggerEnter2D to OnTriggerStay2D (I avoid using it since I read that its bad for perfomance), and had the same result.

Video:

Anyone knows why this is happening?

Is there a better approach to this?

I can’t use static bools or player prefs since there are multiple gates and targets.

I’m struggling A LOT with gameobjects that need to be destroyed on reload. Even more with objects that need to be destroyed after application quit (like if you pick up a Heart container that increases max health, that game object should be gone forever, otherwise you can just close and reopen the game and keep getting it).
I’m pretty sure there is a simpler approach to all of this. There must be. Any docs/tutorials you guys recommend me to read/watch?

Even If I got this to work, I would have issues such as:

Player shoots the target.
Restart the game without saving.
Saves the game and watch the target and the barrier magically going down…

Please help. This is the last thing I need to figure out before releasing my demo. I’ve been stuck on this for 2 days now…