Вместо того, чтобы пытаться сохранить получившуюся вселенную, просто создайте уникальное случайное начальное значение для каждого игрока и используйте его для процедурного создания мира на лету, когда игрок играет.
Когда вы заполняете свой генератор одним и тем же значением каждый раз, случайные числа будут одинаковыми каждый раз. Так что, если мой уникальный случайный идентификатор игрока равен 654156475
, то добавьте этот идентификатор в генератор юниверса, когда я загружу игру, и генератор будет каждый раз генерировать одну и ту же юниверс. Другой игрок получит другую вселенную, потому что его семя отличается от моего.
См. Раздел "1008 * видеоигр" в этой статье , чтобы получить краткий обзор использования этой техники в играх.
Или, вместо того, чтобы записать его как генератор вселенной, запишите его как генератор солнечной системы (или любую меньшую единицу пространства, которую займет игрок). Затем сохраните случайное начальное число для каждой солнечной системы и используйте эти начальные числа (что будет относительно небольшим количеством данных) для создания (и повторного создания того же материала позже) игрового поля на лету как игрок играет.
Основным преимуществом этого подхода является то, что вам нужно только хранить начальные значения на диске, который представляет собой очень маленький объем данных, и вам вообще не нужно хранить данные юниверса. Мало того, что регенерация только небольших частей вселенной на лету часто может быть намного быстрее, чем загрузка ее с диска в любом случае.