(统一)如何在Android上读取旧游戏数据?

时间:2018-10-07 22:54:07

标签: android unity3d sharedpreferences

三年前,我用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();
}

3 个答案:

答案 0 :(得分:0)

我认为访问使用不同引擎保存的持久性数据并不容易-但是我可以看到的解决方案是使用旧引擎发布更新,该更新会将数据上传到远程服务器,然后下载使用Unity,但由于您已经发布了可能无法使用的统一版本

答案 1 :(得分:0)

PlayerPrefs和SharedPreferences是不同的东西。

但是有解决方案。 Unity允许向您的Unity项目添加本地android Java或C ++代码,并使用接口访问该代码。 因此,您可以使用Android SDK / NDK方法编写一些代码来访问您的SharedPreferences,并将其作为JAR或AAR添加到Unity项目中。

在官方文档https://docs.unity3d.com/Manual/PluginsForAndroid.html

中进行阅读

答案 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”数据。