我有一个GameDataEditor。我通过这个输入我的问题但我想在问题时切换bool。因此,如果问一个问题,那么“问”bool将是真的,而且似乎永远不会出现在游戏中。要求随机的问题。有可能成功吗?
我编写此代码但它无法正常工作。没有任何回应。布尔仍然是假的。
public void ShowQuestions()
{
currentRoundData = dataController.GetCurrentRoundData();
questionPool = currentRoundData.questions;
questionIndex = Random.Range(0, questionPool.Count);
if (!questionPool[questionIndex].asked)
{
questionIndex = Random.Range(0, questionPool.Count);
questionData = questionPool[questionIndex];
questionDisplay.GetComponentInChildren<TextMeshProUGUI>().text = questionData.question;
}
}
public void Close()
{
questionPool[questionIndex].asked = true;
}
关闭方法是一种按钮方法。
答案 0 :(得分:0)
一个基本的重构会把它改成
更多的东西while (questionPool[questionIndex].asked)
questionIndex = Random.Range(0, questionPool.Count);
// carry on
但是这种方法有严重的缺点 - 一旦用完了未提出的问题,它基本上会冻结你的过程。更强大的解决方案是创建两个列表。我不确定你用于问题的结构是什么,我会讨论问题(但你可以使用&#39;字符串&#39;如果你没有存储任何其他数据,比如正确回答数据
List<Question> questionsAsked;
List<Question> questionsNotAsked;
Question currentQuestion;
void StartQuiz()
{
questionsAsked=new List<Question>();
questionsNotAsked=new List<Question>();
foreach (Question q in dataController.GetCurrentRoundData().questions)
{
questionsNotAsked.Add(q);
}
}
void AskQuestion()
{
if (currentQuestion!=null)
{
questionsNotAsked.Remove(currentQuestion);
questionsAsked.Add(currentQuestion);
}
if (questionsNotAsked.Count>0)
{
currentQuestion=questionsNotAsked[ questionIndex = Random.Range(0, questionPool.Count)];
yourTextObject.text=qurrentQuestion.ToString();
}
else
{
Debug.Log("quiz ended");
}
currentQuestion=questionsNotAsked
}
如果您不需要,可以跳过跟踪已添加的问题,但重要的是首先将所有问题复制到临时列表中,然后在列表中删除每个问题。我问他们。这样你肯定不会两次绘制同样的问题。替换&#39;问题&#39;用&#39;字符串&#39;如果这是你的设置