首页 > 解决方案 > 在 Unity 中完成后退出聊天窗口

问题描述

我正在尝试构建一个界面,以便我可以加载一个聊天窗口,其中包含我可以在窗口中阅读的消息。用户按下回车键,消息索引增加,因此显示下一条消息。在显示最后一条消息后,例如 lvl 7,事件 1 我想关闭窗口。

3个参数分别是level、event、messageindex。

发生的情况是我没有看到聊天窗口,并且窗口中没有显示任何消息。如何修改算法,以便阅读关卡和事件的所有消息,然后正确关闭窗口?

...
Debug.Log("File size is" + sizeoffile);
for (int i = 0; i < sizeoffile; i++)
{
    if ((storyitemData["storyline"][i]["event"].ToString() == eventno.ToString()) & (storyitemData["storyline"][i]["level"].ToString() == levelno.ToString()) & (storyitemData["storyline"][i]["index"].ToString() == msgindex.ToString()))
    {
        Debug.Log("read message was called with message index " + msgindex + " and the content is " + storyitemData["storyline"][i]["content"].ToString());

        //check that this is right
        txtlbl.GetComponent<Text>().text = storyitemData["storyline"][i]["content"].ToString();
    } 
    else if ((storyitemData["storyline"][i]["event"].ToString() == eventno.ToString()) & (storyitemData["storyline"][i]["level"].ToString() == levelno.ToString()) & (storyitemData["storyline"][i]["index"].ToString() != msgindex.ToString()))
    {
        msgindex = 1;
        chatwindow.active = false;
    }
}

示例 JSON

{
   "storyline":[
      {
         "level":1,
         "event":1,
         "index":1,
         "content":"hello"
      },
      {
         "level":1,
         "event":1,
         "index":2,
         "content":"yes I saw that"
      },
      {
         "level":7,
         "event":1,
         "index":1,
         "content":"can I buy a sandwhich?"
      },
      {
         "level":7,
         "event":1,
         "index":2,
         "content":"thank you"
      },
      {
         "level":7,
         "event":1,
         "index":3,
         "content":"Salt please"
      },
      {
         "level":7,
         "event":2,
         "index":1,
         "content":"Java was"
      },
      {
         "level":7,
         "event":2,
         "index":2,
         "content":"my first language"
      }
   ]
}

标签: c#jsonunity3duser-interface

解决方案


有很多方法可以处理这个问题,如果没有更多的代码,很难确定你的设置是什么。您真正向我们展示的只是您将特定索引传递给列表,但由于某种原因仍在迭代列表,其大小sizeoffile根本没有提及。

我也不确定您是否打算这样做,但是在您的 if 条件中,您使用的不是 &&AND 运算符,而是AND 运算符,这是不同的。bit-wise &

您可以简单地先添加另一个条件检查,以查看您正在读取的当前索引是否即将超过您正在使用的容器类型。

if((storyitemData["storyline"].Count) <= msgindex)
{
    // we reached the end of the container, so disable our chat window
}
else if((storyitemData["storyline"][i]["event"].ToString() == eventno.ToString()) & (storyitemData["storyline"][i]["level"].ToString() == levelno.ToString()) & (storyitemData["storyline"][i]["index"].ToString() == msgindex.ToString())))
{
...
}

如果我提到的内容不起作用,请在您的问题中添加更多细节,并且更多代码也不会受到伤害。将您要序列化的结构的原始容器添加到 JSON 会有所帮助。您是否有理由将整个聊天日志序列化为 JSON 以传递您的游戏?


推荐阅读