【问题标题】:(Unity) How to read old game data on Android?(Unity) 如何在Android上读取旧游戏数据?
【发布时间】:2018-10-07 22:54:06
【问题描述】:

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

【问题讨论】:

  • 我无法准确说出您在说什么,因为 Android 不会在您更新游戏时删除 PlayerPrefs 数据
  • 在Andengine写游戏的时候,我用了名字“kayit”来保存数据。 (getSharedPreferences("kayit", 0)) 但 Unity 使用默认位置。因此,我无法访问旧数据,并且在游戏更新时会刷新所有数据。
  • 看来您使用的不是 Unity 引擎,而是 Andengine。如果这是真的,那么不要标记 Unity
  • 1) 我使用 Andengine 编写并发布了游戏。 2)当然,我用“SharedPreferences”存储了保存数据。 3) 我现在正在用 Unity 重写游戏。 Unity 不会读取旧游戏的数据。因为它使用“PlayerPrefs”。 4)因此,当我发送更新时,玩游戏的人的所有数据都会被重置。 5)所以,我需要这样:link
  • 如果是这种情况,请使用 Java 显示您的旧保存和加载脚本。你必须展示它的样子

标签: android unity3d sharedpreferences


【解决方案1】:

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

【讨论】:

  • 他写道,他在这里找到了一条路; link ,但对于 Cocos2D。我不知道为 Andengine 工作。
【解决方案2】:

PlayerPrefs 和 SharedPreferences 是不同的东西。

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

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

【讨论】:

  • 感谢您的回答..我以前见过。但是时间有点长。现在,我将处理一个较短的解决方案。
【解决方案3】:
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”数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 2018-03-25
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多