c# - 在 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"
}
]
}
解决方案
有很多方法可以处理这个问题,如果没有更多的代码,很难确定你的设置是什么。您真正向我们展示的只是您将特定索引传递给列表,但由于某种原因仍在迭代列表,其大小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 以传递您的游戏?
推荐阅读
- linux - Bash:一次有两个 for 循环?
- .net - 在 .NET 的嵌套配置部分中指定类类型
- c# - 将布尔列表转换为针对字符串值的 linq 查询的最佳方法
- c# - 在 C# 中将二进制搜索解析为数组列表
- php - 为什么使用会话时变量显示未定义
- android - 如何使用 ConstraintLayout 在 android studio 中添加垂直分隔线
- c++ - 非预先声明的函数调用适用于类类型,但不适用于原始类型
- spring-boot - 在独立 Spring Boot 应用程序中配置 DataSource 和 JdbcTemplate
- python - 绘制重要性变量 xgboost Python
- elasticsearch - 当我只要求一个特定的索引时,为什么 Elasticsearch 会为所有索引创建快照?