Unity3D 从 XML 文件保存和加载数据不起作用

Posted

技术标签:

【中文标题】Unity3D 从 XML 文件保存和加载数据不起作用【英文标题】:Unity3D Save and Load data from an XML file doesn't work 【发布时间】:2015-08-10 21:29:52 【问题描述】:

我正在为多游戏共享成就系统构建我的第一个原型。这意味着有两个或多个游戏使用一个共享的成就数据。我将数据存储在 .xml 文件中,目前 xml 仅包含硬币数据。

所以我希望我的程序从中加载和修改硬币数量。

这是我的 XML:

<Achievement><Coins>800</Coins></Achievement>

我的代码:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

public class XMLTest : MonoBehaviour 

string Filelocation, FileName;

private Text CoinsText;

public int Coins;
public int Price;
void Start () 
    CoinsText = GameObject.Find("CoinsText").GetComponent<Text>();
    Filelocation = "E:/Projek/Projek Pak Suprapedi/XML Test/";
    FileName = "Coins.xml";


public void WriteToXML()

    XmlDocument XmlDoc = new XmlDocument();
    if(File.Exists(Filelocation + FileName))
    
        XmlDoc.Load(Path.Combine(Filelocation, FileName));
        XmlNodeList AchievementList = XmlDoc.GetElementsByTagName("Achievement");
        foreach(XmlNode node in AchievementList)
        
            if(node.Name == "Coins")
            
                node.InnerText = Coins.ToString();
            
        
        XmlDoc.Save(Path.Combine(Filelocation, FileName));
    


public void LoadFromXML()

    XmlDocument XmlDoc = new XmlDocument();
    if(File.Exists(Filelocation + FileName))
    
        XmlDoc.Load(Path.Combine(Filelocation,FileName));
        XmlNodeList AchievementList = XmlDoc.GetElementsByTagName("Achievement");
        foreach(XmlNode node in AchievementList)
        
            if(node.Name == "Coins")
            
                Coins = int.Parse(node.InnerText);
            
        
    


public void Buy()

    Coins -= Price;


public void GetMoney()

    Coins += Price;


void Update()

        CoinsText.text = "Your Coins : " + Coins.ToString();
    

我将公共空白分配给一个按钮,这样我就可以修改硬币然后保存或加载它。但似乎加载和保存功能不会做任何事情,xml文件没有任何反应。

我会将我的游戏部署到android平台,但我不知道这种方法是否可行,是吗?

【问题讨论】:

旁注:Filelocation + FileNamePath.Combine(Filelocation, FileName) 可能会产生不同的结果... 那么我需要选择哪一个?? @RisalFajarAmiyardi,在 MDSN 上,您可以看到行为会根据您传入的内容略有改变。很大程度上取决于您正在组合的内容。就个人而言,我觉得Path.Combine 有点“安全”。你可以阅读它here @DangerZone 好的,所以我将使用Path.Combine。安卓平台能用吗? 使用Sqlite,比使用xml文件好很多。 【参考方案1】:

我会回答我自己的问题。我找到了问题。

所以问题是:

XmlNodeList AchievementList = XmlDoc.GetElementsByTagName("Achievement");

我将其替换为

XmlNodeList AchievementList = XmlDoc.GetElementsByTagName("Coins");

而且有效!!

我想你现在可以理解问题所在了

【讨论】:

以上是关于Unity3D 从 XML 文件保存和加载数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Unity3d - 因为未找到crossdomain.xml策略文件而被拒绝

重新加载的 Spark 模型似乎不起作用

将数据从 datagridview 保存到 XML 并加载

Unity3D加载dat文件中的文字内容

如何将输入/选择值从网站保存到 XML/JSON 文件并使用 JavaScript 自动加载再次填充它们

将数据从 .txt 保存并加载到正确的 texbox