Unity中C#如何实现循环是非测验答题完成后结束游戏?
解决Unity是非题测验循环问题:检查未回答问题状态
嘿,我懂你遇到的这个问题——5道题都答完了程序还在不停循环,确实挺烦的。你猜的方向完全没错,只要盯着unansweredQuestions的状态做判断,就能轻松搞定。
下面给你具体的实现步骤和代码示例:
核心思路
每次准备加载下一题之前,先检查unansweredQuestions这个集合是不是空的:
- 如果为空,说明所有题目都已经答完了,直接触发游戏结束逻辑就行
- 如果不为空,再正常加载下一题
具体代码修改
假设你有一个用来显示下一题的方法(比如DisplayNextQuestion()),把它改成这样:
public void DisplayNextQuestion() { // 第一步:先检查有没有剩余未回答的问题 if (unansweredQuestions.Count == 0) { // 所有题都答完了,执行结束流程 EndQuiz(); return; // 直接返回,不要再往下执行加载题目的代码 } // 原来的加载下一题的逻辑(比如随机选一道题) int randomIndex = Random.Range(0, unansweredQuestions.Count); currentQuestion = unansweredQuestions[randomIndex]; // 更新UI显示问题内容(根据你的实际代码调整) questionText.text = currentQuestion.questionText; // 把当前问题从未回答列表里移除,避免重复出现 unansweredQuestions.RemoveAt(randomIndex); }
然后写一个EndQuiz()方法来处理结束逻辑,比如:
private void EndQuiz() { // 示例1:打印最终得分到控制台 Debug.Log($"测验结束!你的得分是:{score}/5"); // 示例2:加载结束场景 // SceneManager.LoadScene("QuizEndScene"); // 示例3:禁用答题按钮,防止用户继续操作 trueButton.interactable = false; falseButton.interactable = false; // 如果有用协程或者定时器,记得停止它们 if (quizLoopCoroutine != null) { StopCoroutine(quizLoopCoroutine); } }
额外注意点
- 初始化要正确:确保在
Start()方法里把所有题目都复制到unansweredQuestions里,比如:
public List<Question> allQuizQuestions; // 在Inspector面板拖入你的5道题 private List<Question> unansweredQuestions; void Start() { // 初始化未回答列表,复制全部题目 unansweredQuestions = new List<Question>(allQuizQuestions); // 显示第一道题 DisplayNextQuestion(); }
- 如果用Update循环:如果你的问题循环是在
Update()里处理的,也要加个判断:
void Update() { // 没有剩余问题的话,直接跳过Update里的逻辑 if (unansweredQuestions.Count == 0) return; // 原来的Update逻辑,比如监听输入、计时等... }
这样改完之后,当最后一道题答完,unansweredQuestions就会变成空集合,程序就会触发结束逻辑,不会再继续循环加载题目啦。
内容的提问来源于stack exchange,提问作者Inori
相关产品推荐
相关产品推荐

