Code running in a previous state with old data after setting objects to active

In my game I have it setup to change rooms to inactive when they are out of sight, and back to active when the player goes close enough.

Visibly it works great. However… objects in a room that ‘changed’ (ie a door opening) redo that change the next time the room becomes active. This is particularly an issue because they redo this without running the proper code again.

For example- I throw a switch and hear the appropriate sound effect. I leave to go away a few rooms, put a breakpoint (Using Visual Studio) the ONLY place the switch sound is played, and return. The switch sound plays again and never trips the breakpoint. Ive tried making it so that the switches audio source drops off to nothing at a distance less then the player has gone and it still plays at the same volume making it seem as if the logic has the old position for the player.

As best as I can understand it… when an object is reset to active it reapplies code that was run on it previously in the state it was at that point. For some stuff thats great, but for other stuff its a serious issue if I cant control it.

I can make things work by always rendering objects like this… but it causes a painful rendering overhead on my phone.

Has anyone else encountered something like this, and maybe has an idea of something I can try?

If my explanation of code running in a previous state with old data makes sense… can anyone point me at what sort of engine tool/structure in unity this is? Ive never encountered something quite like this so I dont know what to search for.

Thanks.

Hmm I did find a better approach which handles my problems. Now instead of setting things to inactive, I just disable the renderer and collider components. Because the objects remain active they dont run any code over again.

I would still really like to know more about why code can be run again in an old state like this though.