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

Unity VR开发:如何实现for循环等待用户输入的交互控制逻辑

问题解决方案

核心问题原因

你当前代码的逻辑缺陷在于:yield return new WaitForSeconds(duration + 5)是固定时长等待,等待结束后只会检测当前一帧的按键输入,只要用户没有刚好在这一帧按下对应按键,就会直接跳过输入判断进入下一轮循环,完全没达到等待用户输入完成的效果。
另外注意你代码中错误判定用的按键是f,但需求里说明错误按w键,需要先统一按键规则。

修正后的代码

// 提前定义全局的分数变量,你原有代码应该已经声明该变量
public int score = 1; // 初始数字长度默认从1开始,可根据需求调整

IEnumerator playDSBtask()
{
    bool secondWrong = false;
    fillList();

    for (int i = 0; i < 10; i++)
    {
        List<AudioSource> x = chooseList(score);
        AudioSource myAudio = x[0];
        float duration = myAudio.clip.length;
        myAudio.Play();

        // 第一步:等待音频完整播放完成
        yield return new WaitForSeconds(duration);

        // 第二步:阻塞等待用户按下有效按键,未检测到有效输入则一直等待
        bool inputReceived = false;
        while (!inputReceived)
        {
            // 检测正确按键r
            if (Input.GetKeyDown(KeyCode.R))
            {
                score++;
                secondWrong = false;
                inputReceived = true;
            }
            // 检测错误按键w,与需求规则对齐
            else if (Input.GetKeyDown(KeyCode.W))
            {
                if (!secondWrong)
                {
                    secondWrong = true;
                }
                else
                {
                    score = Mathf.Max(1, score - 1); // 防护逻辑:避免数字长度减到0以下
                    secondWrong = false;
                }
                inputReceived = true;
            }
            // 未检测到有效输入则等待一帧后再次检测
            yield return null;
        }

        x.Remove(myAudio);
    }

    // 可在此处添加10轮任务完成后的收尾逻辑,比如显示结果、跳转界面等
    Debug.Log("10轮任务已完成");
}

逻辑说明

  • 用while循环在协程内做输入阻塞,只有用户按下r或者w有效按键后,才会退出循环进入下一轮for循环,完全符合等待用户输入完成再继续的需求,不需要替换for循环结构
  • 新增了分数下限防护逻辑,避免连续错误导致数字长度变为负数
  • 删除了原代码中无意义的myAudio.GetComponent<AudioSource>();语句,myAudio本身已经是AudioSource类型不需要重复获取
  • 如果需要限制用户最长作答时间,可以在输入等待的while循环内增加计时逻辑,超过指定时间直接判定为作答错误即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:36:04