我正在制作2D游戏,稍后将其用作摊位上的广告活动,我需要存储用户信息,姓名,号码,电子邮件和分数。数据可能超过数千个条目。在unity5中实现它的最佳和免费方式是什么?游戏将部署在Android上。
答案 0 :(得分:4)
Unity中存在一个很大的问题,人们在网上看到完全错误的示例代码,而且荒谬的问题会在几年内传播开来。永远不要使用“StreamWriter” - 只需使用简单的File.Write函数。不可能更容易。
关于上述问题:“数以千计”的条目绝对没有。 (应用程序中任何不相关的小图标图像都会使您的名称/地址数据的大小相形见绌。)
(1)你可以保存一个文本文件,
在Unity中编写和读取文件非常容易。
// IO crib sheet..
// filePath = Application.persistentDataPath+"/"+fileName;
// check if file exists System.IO.File.Exists(f)
// write to file File.WriteAllText(f,t)
// delete the file if needed File.Delete(f)
// read from a file File.ReadAllText(f)
这就是它的全部内容。
string currentText = File.ReadAllText(filePath);
注意好............
// filePath = Application.persistentDataPath+"/"+fileName;
// YOU MUST USE "Application.persistentDataPath"
// YOU CANNOT USE ANYTHING ELSE
// NOTHING OTHER THAN "Application.persistentDataPath" WORKS
// ALL OTHER OPTIONS FAIL ON ALL PLATFORMS
// YOU CAN >ONLY< USE Application.persistentDataPath IN UNITY
您可以将信息存储为任何格式,例如JSON或csv。由于您拥有少量信息,因此您可以轻松地将json保留为List并轻松访问它。
请注意,如果您不熟悉非常基本的编程任务,例如使用JSON或csv(非常简单),您将需要研究它。所以问题/答案不能成为教程。
(2)您可以了解如何使用本地 SQL数据库,这非常值得学习。做ŁukaszMotyczka在评论中说的话。
(3)你的任务确实很小,你可以使用PlayerPrefs
。但请注意这实际上是最困难的方法!这将是一个真正的混乱,试图将PlayerPrefs用作一个简单的数据库。所以不要这样做。
(4)请注意,实际上这些天没有“本地应用程序”。成为“应用程序开发人员”是成为云开发人员,可能需要使用Firebase等(Parse今年出人意料地关闭了!)
答案 1 :(得分:2)
对于其他任何人来到这里是因为他们试图访问Application.StreamingDataPath(或者其他任何内容),你不能简单地使用Fattie的回复中讨论的File api。您需要使用Web请求,因为APK本质上是一个压缩文件夹,System.IO无法访问这些包的内部。
您需要使用UnityWebRequest从PKG中的所需位置获取数据。您可以通过在项目中的任何位置添加文件夹并将其称为StreamingAssets(资源文件夹在APK中重建并且无法直接访让游戏开始非常缓慢),然后将你的UWR指向Application.streamingDataPath并从request.downloadHandler.data获取数据。
为了保存新数据,你必须使用Application.persistantDataPath,此时使用System.IO.File就可以了。
以下是从APK!/ assets /文件夹中获取数据的示例(android放置StreamingAssets文件夹),然后将其保存到某个位置供以后使用。
public IEnumerator GetSomeDataAndThenSave(string path)
{
UnityWebRequest request = UnityWebRequest.Get(path);
request.Send();
while(!request.isDone)
{
yield return null;
}
if (!request.isNetworkError && (request.responseCode == 0 || request.responseCode == (long)System.Net.HttpStatusCode.OK))
{
WrapperClass yourClassList = new WrapperClass();
YourClassList.members = JsonUtility.FromJson<YourClass>(request.downloadHandler.text);
var bytes = System.Text.Encoding.UTF8.GetBytes(JsonUtility.ToJson(instance));
File.WriteAllBytes(Application.persistentDataPath + "/SubDirectory/" + Path.GetFileName(path), bytes);
}
request.Dispose();
}
希望能为其他遇到同样问题的人解决问题。
答案 2 :(得分:0)
您使用PlayerPrefs(Key,Value)
在Unity中存储数据。它是Unity中存储数据的简单方法之一。