使用unity(C#)在Web服务器上保存/加载xml文件

时间:2017-02-27 11:12:45

标签: xml unity3d server save load

我正在为学校建立一个在线测试系统,问题和答案保存在学校网站服务器上的xml文件中,问题是我不知道如何在服务器上保存xml文件我该怎么称呼它? 我的代码到现在为止

 using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using System.Xml.Serialization;
    using System.IO;
    using System;
    public class XMLSerializer : MonoBehaviour {
        public string studentname;

        public void fff() {

            string path = "d:/" + "studentanswer"+ ".xml";
            Debug.Log (path);
            XmlSerializer serializer = new XmlSerializer (typeof(Level1));

            Level1 ak47 = new Level1{ Items=new [] {new mainitems { Question = "a", Answer = "2" },new mainitems { Question="b",Answer="5"}}};

            StreamWriter writer = new StreamWriter(path);
            serializer.Serialize(writer, ak47);
            writer.Close();

        }

    }

2 个答案:

答案 0 :(得分:1)

您将需要某种数据层与数据库通信!

只是一些想要使用数据层的方法:

// This would probably be your fff() method.
public void SaveXml(string xmlData) {
    StartCoroutine(DataLayer.SaveXml(xmlData));
}

然后我们的静态类将与数据库层对话:

using UnityEngine;
static class DataLayer
{
    public static string url = "http://www.yourdomain.com/DatabaseLayer.php";

    public static IEnumerator SaveXml(string xmlData)
    {
        WWWForm wwwForm = new WWWForm();
        wwwForm.AddField("action", "save");
        wwwForm.AddField("xmldata", xmlData);

        WWW www = new WWW(url, wwwForm);

        // Wait until the request has been sent and a response from the server been recieved:
        yield return www;

        if (www.error == null) {
            // Success! Debug.Log what the server displays
            Debug.Log(www.text);
        }
    }

然后是DatabaseLayer.php(我们之前在url中引用)(不一定是php,它可以是您选择的任何语言,可以接收POST并与数据库通信Php设置起来非常简单)一个快速的例子,没有安全性的样子:

$con = new mysqli("your.host","your_user","your_pwd","your_db");
if ($con->connect_errno)
{
    echo "Failed to connect to db: " . $con->connect_error;
}


// If xmlData has been sent and the POST parameter "action" == "save"
if ($_POST['xmlData'] && $_POST['action'] == "save") 
{
    $xmlData = $_POST['xmlData'];
    $query = 'insert into YourTable (xmlDataColumnName) values ("' . $xmlData . '")';


    if ($res = $con->query($query)) {
        echo 'Level saved';
    } else {
        echo $con->error;
    }
}

流程的简单概述是:

  

Unity MonoBehaviour游戏脚本 - >静态数据层类< - > Php - < - >数据库

如果您想了解如何使用协同程序以及在MonoBehaviour中完成协程时获取信息的更多信息和示例(在上面的概述中将“箭头”从静态数据层类添加回Unity MonoBehaviour游戏脚本){{3 }}!

关于从数据库获取信息,它是相同的,但不是只插入php层中的数据库,而是从数据库中选择并打印它,这将使我们在Static DataLayer类中接收到这些信息在www.textwww.text是您要求的网站上显示的所有内容。

答案 1 :(得分:0)

您将需要Web服务器中的某些服务器端脚本(例如PHP),然后您可以使用WWW类调用这些脚本。

检查一些PHP + unity教程,你将有一个良好的开端