1

我目前正在 Unity 3D 中使用 C# 制作测验 Web 服务。我对 C# 比较陌生。

我遇到了一个我自己似乎无法解决的问题。我能够一次从数据库中检索所有问题和可能的答案。我的问题是我无法将它们分开并一次显示一个问题和一组答案。我不知道该怎么做!

这是我调用 Web 服务的方法:

public void retrieveQuizObject(){

    QuizService service = new QuizService();

    quizModel q = new quizModel();

    quizModel[] quizArray = new quizModel[3];

    List<quizModel> quizList = new List<quizModel>();

    //consuming web service
    object[] qArray = quizList.ToArray();
    qArray = service.playQuiz();


    foreach(object element in qArray)
        {
        quizArray[n] = (quizModel)element;
        Debug.Log ("Array Size: " + quizArray.Length);
        Debug.Log ("Questions: " + quizArray[n].question);//just checking to see questions returned
        }
  }

这是 Web 服务 SQL:

"SELECT * from quiz ORDER BY RAND() LIMIT 3"

测验表具有以下列:QuizId、问题、答案 A、答案 B、答案 C、答案 D。答案 A 始终是正确答案。我打算以后洗牌!

使用 GUI 界面,我想一次显示每个问题和四个可能的答案,而不是一次显示所有答案(比如谁想成为百万富翁)。当用户选择他们的选项时,应该会出现一个新问题。我尝试了许多循环变体,并尝试仅在按下 GUI 按钮但无法弄清楚时迭代循环。

我应该如何处理这个?我应该使用哪个循环以及如何暂停它?

我非常感谢您的帮助!谢谢!

4

1 回答 1

0

我不确定上面的代码是否是您以伪形式的目标,或者您是否确实让服务/客户端正常工作,如果没有,似乎您需要先设置一个框架,然后再了解表格设计和游戏机制的细节.

我会开始围绕 Web API 构建一个框架,如果您遵循一些好的教程,它们会非常简单。

http://www.asp.net/web-api

然后对于持久性,如果您使用 SQL,则可以使用实体框架,或者 NoSQL 解决方案可能更有意义,例如 Redis:

http://www.d80.co.uk/post/2011/05/12/Redis-Tutorial-with-ServiceStackRedis.aspx

一旦你暴露了你的端点,你将使用 WWW 在 Unity3D 中使用它

以下是我用来将游戏对象实例化为数据包的方法,它在完成后会自行处理,您传入一个接收字符串的回调函数,以便您可以异步处理您的响应。

class CoroutineServiceAsync : IServiceAsync

{

    public void SendRequest(string url, Action<string> callback, string data)

    {

        Debug.Log("Sending service call with data: " + data);

        GameObject obj = new GameObject("ServiceCall: " + data);

        CoRoutineRequest packet = obj.AddComponent<CoRoutineRequest>();

        packet.SendRequest(url, callback, data);

    }

}



class CoRoutineRequest : MonoBehaviour

{

    void Start()

    {

        DontDestroyOnLoad(gameObject);

    }



    public void SendRequest(string url, Action<string> callback, string data)

    {

        StartCoroutine(StartSendRequest(url, callback, data));

    }



    IEnumerator StartSendRequest(string url, Action<string> callback, string data)

    {

        WWW www = new WWW(url + "/" + data);

        yield return www;



        if (callback != null)

            callback(www.text);



        Destroy(gameObject);

    }

}

在玩家回答或开始后,您会得到一个问答行。如果您不希望一次全部弹出答案选项,那么当您循环/迭代答案选项时,您会遇到延迟。

我认为您需要的唯一循环是显示答案选项,其余的是基于玩家输入的事件驱动(当他们选择答案时)以及当问题和答案行数据包与您的回调一起出现时(这将触发数据显示在您的 GUI 中)。

根据您想要的安全之王,您可能想要处理一些逻辑服务器端,因此需要管理会话。我会从简单的开始并假设玩家玩得很好。

希望我正确理解了这个问题,并提供了一些帮助。

于 2013-04-05T06:01:46.743 回答