是否可以通过脚本在编辑器中切换bool? (Unity3D)

时间:2018-03-13 15:33:35

标签: unity3d boolean editor

我有一个GameDataEditor。我通过这个输入我的问题但我想在问题时切换bool。因此,如果问一个问题,那么“问”bool将是真的,而且似乎永远不会出现在游戏中。要求随机的问题。有可能成功吗?

My GameDataEditor

我编写此代码但它无法正常工作。没有任何回应。布尔仍然是假的。

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;
}

关闭方法是一种按钮方法。

1 个答案:

答案 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;如果这是你的设置