Лучший способ сохранить игровые данные в Unity, безопасный и независимый от платформы - PullRequest
0 голосов
/ 26 января 2019

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

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

Ответы [ 2 ]

0 голосов
/ 26 января 2019

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

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

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

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

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

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

0 голосов
/ 26 января 2019

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

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

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

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

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

1) создать класс, который будет хранить данные (необязательно для него нужны расширения из monobehaviour:

[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файл.

...