Лучший способ сохранить игровые данные в Unity, безопасный и независимый от платформы

Я ищу способ сохранить прогресс пользователей в моей игре, я ищу что-то, что не может быть изменено / изменено. Я хотел бы быть в состоянии быть независимым от платформы. И мне бы хотелось, чтобы в игре были сохранены файлы, чтобы пользователь мог передавать свои данные на разные компьютеры (с флешки или еще чего-то). (Поправьте меня, если я ошибаюсь в какой-либо области) Но я верю, потому что мне нужно быть защищенным и независимым от платформы, что убирает предпочтения игрока из уравнения. Я знаю, что есть способ сохранить данные, зашифровав их с помощью Binary, но я не знаю, как это работает и может ли пользователь передавать данные с компьютера на компьютер. Есть ли лучший способ сохранить данные? Является ли шифрование через Binary способом? Если так, как бы я это сделал? Спасибо:) Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

Редактировать: я понимаю, что ничто не является полностью безопасным, я ищу что-то, что может помешать среднестатистическому пользователю зайти в файл, изменить поплавок и иметь кучу денег в игре.

2 ответа

Решение

Первый способ сохранить данные в единстве - использовать PlayerPrefs, используя, например:

PlayerPrefs.SetString("key","value");
PlayerPrefs.SetFloat("key",0.0f);
PlayerPrefs.SetInt("key",0);
PlayerPrefs.Save();

и для получения вам нужно только

PlayerPrefs.GetString("key","default");

Второй способ и способ, позволяющий хранить вас в независимом файле, - это использовать сериализацию, я предпочитаю использовать для него файл json.

1) создайте класс, который будет хранить данные (необязательно, чтобы он расширял монобихи поведения:

[System.Serializable]
public class DataStorer {
  public data1:String = "default value";
  public data2:Int = 4;
  public data3:bool = true;
  ....
}

и хранить его в другом классе с

DataStorer dataStorer  = new DataStorer();
.... // some change in his data
string json = JsonUtility.ToJson(this, true);//true for you can read the file
path = Path.Combine(Application.persistantDataPath, "saved files", "data.json");
File.WriteAllText(path, json);

и для чтения данных

string json= File.ReadAllText(path);
DataStorer dataStorer = new DataStorer();
JsonUtility.FromJsonOverwrite(json, dataStorer);

и теперь вы dateStorer загружен с данными в вашем файле JSON.

В предыдущем ответе упоминаются два хороших метода хранения данных (хотя есть еще некоторые особенности при написании файлов на разных платформах), я хотел бы добавить к теме безопасности, как упомянуто в комментарии здесь.

Прежде всего, ничто не является полностью безопасным, всегда найдется кто-то более яркий, который найдет изъян в вашем коде, может быть, если вы не хотите использовать криптографию, что не является тривиальным с управлением ключами и т. Д.

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

В любом случае будет работать тривиальное решение: сгенерировать хеш-код из вашего набора данных, немного поработать с ним (подсолить или сделать что угодно, чтобы перейти к другому хеш-коду). чтобы вы могли иметь что-то вроде

{
 "name"="john",
 "score"="1234",
 "protection"="043DA33C"
}

если поле 'protection' является хеш-кодом "john1234", оно не будет совпадать с "john9999", следовательно, если пользователь не знает, как вы защищаете свою защиту, вы сможете сказать, что сохранение было подделано

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

См. Эту ссылку, это может вам помочь. https://forum.unity.com/threads/data-encryption-tool-on-assets-store.738299/

Другие вопросы по тегам