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

Мне было интересно... Как лучше всего сохранять данные в играх Unity. JSON? Если да, то как? Спасибо


person messedupsongguy    schedule 23.12.2015    source источник
comment
docs.unity3d.com/Manual/JSONSerialization.html   -  person Vapid Linus    schedule 28.12.2017


Ответы (3)


Вот некоторые из различных способов и методов сохранения данных для проектов Unity:

  1. Независимый от платформы. Один из способов сохранения данных в Unity3D независимым от платформы способом — использовать файл PlayerPrefs. (Подробнее 1, 2). PlayerPrefs — статический класс, очень простой в использовании, но ненадежный.

  2. ПОСТОЯННОСТЬ — СОХРАНЕНИЕ И ЗАГРУЗКА ДАННЫХ с использованием DontDestroyOnLoad, PlayerPrefs и сериализации данных Видеоруководство от unity.

  3. На стороне сервера. Вы также можете использовать сервер для сохранения данных (например, комбинацию PHP и базы данных MySQL). Вы можете использовать его для сохранения данных о счете, профиля пользователя и т. д. Узнайте больше на Unity Wiki< /а>

  4. Для сохранения внутриигровых данных на жесткий диск в формате, который можно будет понять и загрузить позже, используйте функцию .NET/Mono, известную как Сериализация. Подробнее...

  5. Простое руководство JSON по Unity доступно на Unity Wiki или официально. вы можете увидеть сериализацию JSON

  6. SQLite (встроенная база данных для вашего приложения) — еще один отличный вариант для вас, чтобы получить Бесплатный пакет, это просто и легко (мое любимое), если вы знаете SQL.

  7. Scriptable Object: это контейнер данных. Полезно для неизменяемых данных. Подходит для больших неизменяемых данных и удивительно надежной памяти проектов.

введите здесь описание изображения

Приведенное выше взято из моего сообщения в блоге о методах сохранения данных для Приложения Unity3d.

person Muhammad Faizan Khan    schedule 23.12.2015
comment
скажем, у меня есть несколько событий одно за другим, которые будут время от времени обновляться через веб-сервер, и чтобы сохранить данные всех событий на устройствах, что мне использовать? Будет ли это нормально в сериализации, сохранении данных всех событий и обновлении данных позже? Все, что я вижу, это сохранение и загрузка, а не редактирование или обновление в учебниках по сериализации. он очищает старые данные, чтобы сохранить новые данные? - person Zoedia; 31.03.2016
comment
@Zoedia, я думаю, лучше задать отдельный вопрос с некоторыми важными деталями. Так что, может быть, я могу понять и ответить - person Muhammad Faizan Khan; 05.12.2016
comment
Отличный ответ, просто грустно видеть предпочтения игрока № 1, что приводит к тому, что люди сохраняют данные в этом небезопасном месте. Но тем не менее очень четкий ответ. - person Jeroen De Clercq; 11.08.2017
comment
@JeroenDeClercq # 1 — это приложение Unity, в котором проще всего сохранять данные. Не знаю, небезопасно ли это. - person Muhammad Faizan Khan; 11.08.2017
comment
Если кто-то хочет пойти по пути JSON без сторонней библиотеки, у Unity есть несколько официальных инструментов сериализации JSON docs.unity3d.com/Manual/JSONSerialization.html - person Vapid Linus; 28.12.2017
comment
Я обновил ответ. добавил вашу ссылку спасибо - person Muhammad Faizan Khan; 30.12.2017
comment
PlayerPrefs предназначены для хранения пользовательских настроек (отсюда и название), например, громкость звука и НЕ должны использоваться для хранения важных данных, таких как ход игры, поскольку они могут быть удалены при обновлении приложения! - person derHugo; 28.09.2019
comment
@derHugo спасибо за комментарий, не могли бы вы поделиться какой-либо ссылкой на то, что данные приложения (с использованием playerprefs) появляются, когда мы обновляем приложение. Мне нужно, чтобы я мог обновить этот факт в ответе. - person Muhammad Faizan Khan; 28.09.2019

Вы можете использовать многие активы, которые доступны бесплатно и платно в магазине активов.

Сохранить игру бесплатно — сохранение и загрузка XML и JSON.

Синтаксис:

Saver.Save<T> (T data, string fileName);

Пример:

Saver.Save<MyData> (myData, "myData"); // The .json extension will be added automatically

Save Game Pro – сохранение и загрузка двоичного файла. быстро и безопасно. Легко использовать.

Синтаксис:

SaveGame.Save<T> (T data, string identifier);

Пример:

SaveGame.Save<int> (score, "score");
person Empire    schedule 25.05.2017

Если вы хотите хранить свои данные на сервере, есть простой способ с PHP и MySQL. Что вам нужно сделать, это:

ШАГ 1:
Получите любые данные с вашего сервера всего одной строкой (код ниже):

<?php

//SERVER CONNECTION 
$server_name = "localhost";
$server_user = "Er.Ellison";
$server_pass = "supersecretPassword";
$server_db   = "game_test_db";

$connection = new mysqli($server_name , $server_user , $server_pass , $server_db);
if(!$connection) {
  die("Connection failed !" . mysqli_connect_error());
}

// QUERY
$query = "SELECT * FROM items";
$result = mysqli_query($connection , $query);

if(mysqli_num_rows($result) > 0){
  while($row = mysqli_fetch_array($result)){
    echo "id:" . $row['id'] . "|username:" . $row['username'] . "|type:" . $row['type'] . "|score:" . $row['score'] . ";";
  }
} 
?>

И обратите внимание, что вы ДОЛЖНЫ РАЗДЕЛЯТЬ ЛЮБУЮ строку, которую хотите, с помощью ; или любую вещь, которая вам удобна, и помните, что мы собираемся использовать ее в C# в Unity.

ШАГ 2:
Теперь вы должны получить данные из своего Интернета следующим образом (это будет длинная строка):

введите здесь описание изображения

ШАГ 3:
Теперь перейдите в Unity и создайте сценарий C#, прикрепите его к любому объекту в вашей сцене и откройте сценарий, а затем используйте этот код для управления данными, которые вы извлекли из своей базы данных:

public class DataLoader : MonoBehaviour {


public string[] items;


// Use this for initialization
IEnumerator Start () {
    WWW itemsData = new WWW ("http://localhost/_game/test/itemsdata.php");  
    yield return itemsData;
    string itemsDataStrign = itemsData.text;
    print (itemsDataStrign);
    items = itemsDataStrign.Split (';');
    print (GetDataValue(items[0] , "cost:"));
}

string GetDataValue(string data, string index) {
    string value = data.Substring (data.IndexOf(index) + index.Length);
    if (value.Contains ("|")) {
        value = value.Remove (value.IndexOf("|"));
    }
    return value; 
}

}

ШАГ 4:
Вы только что СЕЙЧАС получили данные из базы данных, проверьте изображение в консоли Unity:

введите здесь описание изображения

Я сделал это для тех, кто, как и я, застрял в проблемах с базой данных!

person a_m_dev    schedule 09.08.2017
comment
Я думаю, что $reuslt в вашем коде (три экземпляра) - это опечатка. - person halfer; 09.08.2017
comment
Кстати, когда вы видите сообщения, адресованные вам, пожалуйста, отвечайте на них. Я проголосовал за этот вопрос и отменю голосование, как только вы ответите. Пожалуйста, будьте готовы вносить правки там, где это необходимо, чтобы принести пользу будущим читателям. - person halfer; 10.08.2017
comment
извини, извини, извини, извини, я просто работаю над действительно серьезным проектом, и я просто прихожу сюда, когда могу, кстати, спасибо за редактирование, чувак, я исправлю это ... - person a_m_dev; 10.08.2017