Least resource intensive way for dynamic in-game random background creation

I want to create a random background to the left and right of my camera, so that as the camera moves new objects appear in-front and objects in the back disappear. I’ve created about 15 3D (quite large) different objects for that purpose. I’m thinking about the best way resource-wise to create this infinite background.

  1. The most obvious way (and easiest to implement) is to stack all of my objects in Start() and use a trigger collider to push the last object in front of the line. There are two disadvantages though: First, there is no randomness, but a loop of objects, which I would like to avoid if possible. And second, there would be a lot of objects in the scene that wouldn’t even be visible at start and for quite a long time. Isn’t that resource-consuming?
  2. I thought of putting all of my objects in a GameObject array and (randomly) instantiate how many I need to fill my screen positioning them where I need to, using mesh.bound, while I would destroy object far in the background. But the game I’m working on is for mobile devices, and I read that instatiations/destructions should be avoided as they are quite resource-consuming.

Is there any other “smart” way to achieve what I have in mind? I get as many as 170 draw calls at this point (without any UI elements for now). Are they too much?

The best way is to instantiate all the objects using a pooled quota once during startup and reuse from the quota as necessary.