我的协程功能只工作一次。 _isPaused
变量为true
。找不到我做错了。
IEnumerator Movement()
{
while (_isPaused) // I checked, it's true
{
Debug.Log("Some action");
yield return new WaitForSeconds(0.8f);
}
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.P))
{
StartCoroutine(Movement());
}
}
Here是完整的代码:
答案 0 :(得分:3)
这是您的代码:
while (_isPaused)
{
Debug.Log("Some action");
yield return new WaitForSeconds(0.8f);
}
您的while
循环到达WaitForSeconds
时将暂停。由于您在按下“ P”时在代码中的某个位置将Time.timeScale
设置为0
,因此它将暂停。这是正常现象。这样做是为了使您可以使用Time.timeScale
暂停协同程序功能。将Time.timeScale
设置回1
后,它会自动继续运行。
如果您不希望Time.timeScale
在等待WaitForSeconds
时暂停协程功能,请使用WaitForSecondsRealtime
而不是WaitForSeconds
。
while (_isPaused)
{
Debug.Log("Some action");
yield return new WaitForSecondsRealtime(0.8f);
}
这是因为WaitForSeconds
是通过Time.deltaTime
或类似的属性实现的,当0
设置为Time.timeScale
时,该属性也会变为0
,从而导致计时器暂停而WaitForSecondsRealtime
是用Time.realtimeSinceStartup
实现的,而根本不受Time.timeScale
的影响。
答案 1 :(得分:0)
没有程序的全部代码,很难分辨出什么地方出了问题。我建议您使用 true
测试协程for i in indices:
mat_trans[:, i] = rank_vec
代替使用 _isPause 字段。