Unity3D - В каком формате я должен хранить свои повторы - PullRequest
1 голос
/ 20 октября 2019

Я создаю систему воспроизведения с сохранением состояния в Unity3D и хочу, чтобы воспроизведение было записано в файл. Какой формат файла лучше всего использовать при сохранении воспроизведения? Может XML? Сейчас я храню данные преобразования и реализовал опцию добавления дополнительных данных кадра.

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Это сильно зависит от того, что вы пытаетесь сделать. В этом случае существуют компромиссы для каждого решения.

Исходя из дополнительной информации, которую вы предоставили в комментариях, лучшее решение, которое я могу придумать в этом случае, - это запись сортировка ваше лицо "сеансы "на файл. Тем не менее, для достижения этой цели необходимо выполнить некоторые дополнительные действия.

  1. Создайте класс с именем Frame, создайте другой класс с именем Record, который имеет List<Frame> frames. Таким образом, вы можете поместить любую информацию, которую хотели бы захватить в каждом кадре, в качестве атрибутов в классе Frame.
  2. Поскольку вы не можете маршалировать универсальный тип, вам придется маршалировать каждый кадриндивидуально. Я предлагаю реализовать метод в Record классе, называемый MarshalRecording(), который обрабатывает это для вас.
  3. Однако при этом вам будет сложно разобрать ваши записи, поскольку они могут иметь разные размеры в двоичном виде. form, и у них не будет разделителя, указывающего, где заканчивается кадр и где начинается следующий кадр. Я предлагаю добавлять информацию о размере в начале каждого маршаллированного фрейма, чтобы вы могли демаршировать все фреймы, даже если они имеют разные размеры.

Как @PiotrK указал в своем ответеВы можете использовать protobuf . Тем не менее, я не рекомендую его для вашего конкретного использования. Лично я думаю, что это излишне (слишком много работы для слишком маленьких результатов, protobufs может быть PITA несколько раз).

Если вас беспокоит размер хранилища, вы можете LZ4 в целомвещь (если вы объединяете двоичную информацию в памяти) или LZ4 для каждого кадра (если вы обрабатываете каждый кадр отдельно, а затем добавляете его в файл). Я рекомендую последний, потому что, в зависимости от количества кадров, у вас может не хватить памяти, пока вы распаковываете свою запись.

Ps: Никогда не используйте XML, это злокачественно!

0 голосов
/ 20 октября 2019

Лучший способ, который я знаю, - это использовать какой-нибудь генератор форматов (например, Google Protobuf ). Это имеет несколько преимуществ по сравнению с использованием сериализатора C # по умолчанию:

  1. Управление версиями формата максимально просто;Вы можете добавить новую функцию к формату, и это не будет нарушать повторы, уже существующие в поле
  2. Результат сохраняется как текстовый или двоичный, с благоприятным двоичным форматом и очень малой площадью (например, если некоторые из вашихданные имеют значения по умолчанию, они вообще не будут присутствовать в выводе - загрузчик будет обрабатывать их изящно)
  3. Это технология Google! : -)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...