在Unity游戏中保存数据的最佳方法

时间:2015-12-23 00:06:20

标签: json unity3d persistence unity5 saving-data

我想知道......什么是在Unity游戏中保存数据的最佳方式。 JSONs?如果是这样,怎么样?感谢

4 个答案:

答案 0 :(得分:25)

Short answer您的长问题!

以下是为Unity Projects保存数据的一些不同的方法和方法

  1. 与平台无关:以与平台无关的方式在Unity3D中保存数据的一种方法是使用 PlayerPrefs 类。 (了解详情 12 )。

  2. 持久性 - 保存和加载数据使用 DontDestroyOnLoad PlayerPrefs 和数据序列化 {{ 3}}。

  3. 服务器端:您还可以使用服务器来保存数据(例如PHP和MySQL数据库的组合)。您可以使用它来保存分数数据,用户个人资料等,了解更多信息来自Video Tutorial by unity

  4. 要以稍后可以理解和加载的格式将游戏内数据保存到硬盘,请使用称为序列化<的.NET / Mono功能/ strong>即可。 Unity Wiki

  5. 关于Unity的简单 JSON 指南可在Learn More处获得,或者正式显示Unity Wiki

  6. SQLite 适用于您应用的嵌入式数据库 )是另一个获得JSON serialization的绝佳选择,如果您了解SQL,它很简单(也是我最喜欢的)。

答案 1 :(得分:4)

您可以使用许多资产,这些资产可以免费获得并在资产商店中付费。

Save Game Free - 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");

答案 2 :(得分:2)

如果您想将数据存储在服务器中,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'] . ";";
  }
} 
?>

请注意,您必须将所需的任何字符串分开;或者你对此感到满意的任何东西,并记住我们将在Unity中的C#中使用它。

第2步:
现在你应该像这样从网上获取数据(它将是一个很长的字符串):

enter image description here

第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步:
您现在只需从数据库中检索数据,检查统一控制台中的图像:

enter image description here

我为那些可能像我一样陷入数据库问题的人做了这个!

答案 3 :(得分:1)

有关类似情况和保存数据的简单方法,请参阅我之前的answer