Hi, so my question is what will be better way to do this.
So I have object that will have other models over time (like going to next stage), without going back. Should I have them all parented to gameobject, and enable/disable, or instantiate and destroy each one seperately?
Enabling them sounds like the slightly better option. Enabling has a slight performance advantage over instantiate however it is nothing to write home about. Both ways will work just fine!
It depends on how many objects(models) you are planning on having. Sometimes when you instantiate and destroy objects on demand in the game it can affect performance(For example: Frame rate).
This is where people use the Object Pooling concept which allows you to instantiate the maximum possible value of gameobjects while the game is loaded which is called the pool and then enable and disable them as required.
The advantage of this is that the pooled object is obtained in predictable time whereas creation of the new objects (especially over network) may take variable time.
You can watch this tutorial and see if this help you decide which approach to go for: Object Pooling - Unity Learn
It depends on frequenty of it, Instantiating and destroying object will trigger Garbage Collector and the performance will go down, but if you keep the instantiating and destroying rate down, I guess you will have no problem. but if you see the frame rate goes down, you need to enable/disable gameobjects