我在想... 在Unity游戏中保存数据的最佳方式是什么?使用JSON吗?如果是,如何操作?感谢
我在想... 在Unity游戏中保存数据的最佳方式是什么?使用JSON吗?如果是,如何操作?感谢
平台无关: 在Unity3D中,一种将数据以平台无关的方式保存的方法是使用 PlayerPrefs 类。PlayerPrefs是一个静态类,很容易使用但不可靠。
持久化-保存和加载数据使用 DontDestroyOnLoad,PlayerPrefs和数据 序列化。 可以参考unity官方的视频教程。
服务器端: 也可以使用服务器来保存数据(例如PHP和MySQL数据库的组合)。可以用它来保存得分数据,用户资料,库存等等,更多信息请参见Unity Wiki。还可以使用第三方解决方案如Firebase等。
为了将游戏内数据以后能读取的格式保存到硬盘驱动器,可以使用.NET/Mono特性中称为序列化的功能。了解更多
可以在Unity Wiki上找到有关Unity的简单JSON指南,也可以参考官方文档中的JSON序列化。
SQLite (集成式数据库,适用于应用软件) 是获得免费套餐的另一个绝佳选择,如果您了解SQL语言,它就非常简单易用(也是我的最爱)。
Scriptable Object: 它是一个数据容器,用于存储不变数据。适用于大量不变数据和极大地减少项目的内存使用。
以上内容摘自我在博客中关于Unity3D应用程序数据保存技术的文章。
PlayerPrefs
旨在存储用户的偏好设置(因此得名),例如声音音量等,不应用于存储重要数据,如游戏进度,因为它们可能会在更新应用程序时被删除! - derHugo您可以在资源商店中使用许多免费和付费的资产。
免费保存游戏 - 可以进行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");
<?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#脚本,将其附加到场景中的任何对象上,并打开该脚本,然后使用以下代码来操作从数据库检索到的数据:
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控制台中检查图像:
$reuslt
(三个实例)是一个打字错误。 - halfer