Как вариант, ниже камеры сделать триггер. Если в триггер попадают объекты, уничтожаются, а сверху создаются новые. Допустим все объекты кубические, тогда можно сделать процедурную генерацию на основе клеточных автоматов, задать такие правила, что-бы у игрока всегда был путь прохождения. Так-же для оптимизации, можно сделать пул блоков(максимальное их количество на экране) и не уничтожать/создавать, а активировать/дезактивировать. Это будет происходить быстрее. Движение блоков, желательно прописывать в FixUpdate и делать фиксированный сдвиг для всех объектов.
Триггер под камерой нужно делать с учётом этого сдвига, чтоб блоки не его перепрыгнули. Или рассчитывать по высоте экрана и скорости движения.