Unity 在 while 循环期间冻结,使用计时器或键bard输入来中断它

Unity freezes during while loop with timer or keybard input to break it

提问人:Oren Poliva 提问时间:10/28/2023 更新时间:10/29/2023 访问量:35

问:

我正在设计一个心理学实验。如果按下按钮,我需要等待 x 秒数(WordDuration 变量)或提前结束循环。但团结反而冻结了。我该如何解决这个问题?保持定时精度至关重要(最好在毫秒分辨率下),

       double StartTime = Time.realtimeSinceStartup;
        while (true)
        {
            double tt = Time.realtimeSinceStartup - StartTime;
            if (tt > WordDuration) break;
            if (Input.GetKeyDown(KeyCode.Space)) break; 

        }
unity-game-engine while-loop 冻结

评论

0赞 BugFinder 10/28/2023
没错,它会冻结,因为你有一个循环,只是一圈又一圈,根据这个代码的位置,它会导致冻结。您可能希望在协程(有些人讨厌)中使用它,或者如果您使用的是正确的 unity 版本,则使用 await

答:

0赞 fcolmines23 10/29/2023 #1

虽然循环是恒定的,并且在满足其条件之前不会停止,这可能会导致统一进程在内存不足时停止。要解决此问题,请将其放在 While 循环的末尾。

yield 返回 null;

评论

0赞 Oren Poliva 11/7/2023
还行。问题是我需要非常准确的反应时间,最好是 1 毫秒的水平。因此,等待每一帧都是有问题的。
0赞 Voidsay 11/7/2023
@OrenPoliva那我有个坏消息要告诉你。输入仅每帧更新一次,因此您已经在以 ±9ms(60fps)的速度播放。我不会太难过。您知道确切的错误,并且在进行统计时可以将其考虑在内。想象一下,必须估计物理密钥的中断延迟、中断例程的长度、内核为 Unity 提供一天中的时间、加载程序、运行程序、处理内核请求以查找系统时钟所需的时间......