Каким способом сохранять игровые данные для Android/IOS?
Берете все данные, которые вам нужно сохранить, загоняете в json/xml, и сохраняете в PlayerPrefs как строку.
Для оптимизации можете подробить на логические элементы.
Создайте свою структуру классов/списков итд для сохранения мира из обычных C# классов с публичными свойствами и и публичными пустыми конструкторами. Сохраните все свои данные в эту структуру и сериализуйте в файл. Для сериализации выберите любой из предоставленных ассетов для бинарных форматов и скормите ему ваши классы/списки:
https://assetstore.unity.com/search?q=bson или
https://assetstore.unity.com/search?q=messagepack
Хотя на самом деле JSON местами компактнее BSON, и его тоже можно использовать. JSON.NET неплох. Если нужна мультиплатформа то вот JSON & MessagePack работает везде.
Для того что бы выбрать папку для сохранения можно воспользоваться следующим кодом:#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN || UNITY_WP8
var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
#else
var appData = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
#endif
Для создания файла в этой папке можно использовать следующий код:using(var writer = File.CreateText(Path.Combine(appData , "mysave.json")) {
Для непосредственного сохранения в файл с Json.NET:var serializer = new JsonSerializer();
serializer.Serialize(writer, myData)
Ну, и совет напоследок, не сохранять каждый раз в один и тот же файл, а делать это последовательно в разные файлы, на случай "битого" сохранения.