三年前,我用AndEngine创建并发布了一款针对Android的游戏。现在,我再次团结一致地准备比赛。当我发送更新时,所有旧数据都将被删除。因为Unity使用'PlayerPrefs',而Android使用'SharedPreferences'。
那么,如何使用Unity读取旧数据?
这是我的旧代码设置:
private SharedPreferences data;
private SharedPreferences.Editor editor;
// ======================================================================
public void setup(Activity activity) {
data = activity.getSharedPreferences("kayit", 0);
editor = data.edit();
}
答案 0 :(得分:0)
我认为访问使用不同引擎保存的持久性数据并不容易-但是我可以看到的解决方案是使用旧引擎发布更新,该更新会将数据上传到远程服务器,然后下载使用Unity,但由于您已经发布了可能无法使用的统一版本
答案 1 :(得分:0)
PlayerPrefs和SharedPreferences是不同的东西。
但是有解决方案。 Unity允许向您的Unity项目添加本地android Java或C ++代码,并使用接口访问该代码。 因此,您可以使用Android SDK / NDK方法编写一些代码来访问您的SharedPreferences,并将其作为JAR或AAR添加到Unity项目中。
中进行阅读答案 2 :(得分:0)
private void ReadAndroidSharedPreferences(string packageName, string xmlDataName)
{
string path = "/data/data/" + packageName + "/shared_prefs/" + xmlDataName + ".xml";
FileStream levelFile = File.Open(path, FileMode.Open);
XmlDocument xmlDoc = new XmlDocument();
string xmlText = "";
using (StreamReader sr = new StreamReader(levelFile))
{
string line = null;
do
{
line = sr.ReadLine();
xmlText = xmlText + line + "\n";
} while (line != null);
sr.Close();
levelFile.Close();
}
xmlDoc.LoadXml(xmlText);
var baseNode = xmlDoc.DocumentElement;
foreach (XmlNode node in baseNode.ChildNodes)
{
Debug.Log("Type: " + node.Name);
if (node.Attributes["name"] != null)
Debug.Log("name: " + node.Attributes["name"].Value);
else
Debug.Log("Empty");
if (node.Attributes["value"] != null)
Debug.Log("Value: " + node.Attributes["value"].Value);
else
Debug.Log("Empty");
}
}
用法:
packageName =“ com.yourcompany.yourgame”
xmlDataName = getSharedPreferences文件名(在我的问题中是“ kayit”)
您可以在Android设备监视器上查看所有“ int”和“ bool”数据。