提问人:Oren Poliva 提问时间:10/28/2023 更新时间:10/29/2023 访问量:35
Unity 在 while 循环期间冻结,使用计时器或键bard输入来中断它
Unity freezes during while loop with timer or keybard input to break it
问:
我正在设计一个心理学实验。如果按下按钮,我需要等待 x 秒数(WordDuration 变量)或提前结束循环。但团结反而冻结了。我该如何解决这个问题?保持定时精度至关重要(最好在毫秒分辨率下),
double StartTime = Time.realtimeSinceStartup;
while (true)
{
double tt = Time.realtimeSinceStartup - StartTime;
if (tt > WordDuration) break;
if (Input.GetKeyDown(KeyCode.Space)) break;
}
答:
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 提供一天中的时间、加载程序、运行程序、处理内核请求以查找系统时钟所需的时间......
评论