我需要在Update()
中进行一些初始化工作。
此初始化工作需要一些时间,在初始化完成之前,我无法继续使用Update()
中的常规代码。
此外,此初始化需要一些WaitForSeconds()
才能起作用。
因此,我尝试了以下操作:
private bool _bInitialized = false;
private bool _bStarted = false;
void Update()
{
if (!_bInitialized)
{
if (!_bStarted)
{
_bStarted = true;
StartCoroutine(pInitialize());
}
return;
}
(...) do stuff that can only be done after initialization has been completed
}
但是,似乎无法更改_bInitialized
中的变量IEnumerator
。
_bInitialized
永远不会成为true
:
private IEnumerator pInitialize()
{
WiimoteManager.Cleanup(_wii);
yield return new WaitForSeconds(2);
_wii = WiimoteManager.Wiimotes[0];
yield return new WaitForSeconds(2);
_wii.SetupIRCamera(IRDataType.BASIC);
yield return new WaitForSeconds(2);
_bInitialized = true; //this doesn't seem to work
yield return 0;
}
有人可以告诉我如何正确进行操作吗?
非常感谢您!
答案 0 :(得分:0)
我认为StartCoroutine
并非出于任何原因枚举所有值。
Enumerator
懒惰地生成其值时,并非所有值都被生成,
_bInitialized = true;
从不叫。
您可以通过添加
来确认var enumerator = pInitialize(); while ( enumerator.MoveNext() )
{
// do nothing - just force the enumerator to enumerate all its values
}
根据one of the comments在Antoine Thiry中的建议,
这里可能发生的情况是,协程中的代码正在默默地抛出并捕获异常,也许
WiimoteManager
中的某些代码与此有关。