You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外注意点

  1. 初始化要正确:确保在Start()方法里把所有题目都复制到unansweredQuestions里,比如:
public List<Question> allQuizQuestions; // 在Inspector面板拖入你的5道题
private List<Question> unansweredQuestions;

void Start()
{
    // 初始化未回答列表,复制全部题目
    unansweredQuestions = new List<Question>(allQuizQuestions);
    // 显示第一道题
    DisplayNextQuestion();
}
  1. 如果用Update循环:如果你的问题循环是在Update()里处理的,也要加个判断:
void Update()
{
    // 没有剩余问题的话,直接跳过Update里的逻辑
    if (unansweredQuestions.Count == 0) return;

    // 原来的Update逻辑,比如监听输入、计时等...
}

这样改完之后,当最后一道题答完,unansweredQuestions就会变成空集合,程序就会触发结束逻辑,不会再继续循环加载题目啦。

内容的提问来源于stack exchange,提问作者Inori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:20