问题分析
直接用ILSpy或类似工具反编译出的C#脚本里协程(Coroutine)和编写时明显不同:
无参数协程示例:
private IEnumerator startCt_result()
{
ScGame.<startCt_result>c__IteratorE <startCt_result>c__IteratorE = new ScGame.<startCt_result>c__IteratorE();
<startCt_result>c__IteratorE.<>f__this = this;
return <startCt_result>c__IteratorE;
}
带参数协程示例:
private IEnumerator FreeRun(float holdTime)
{
NinjaMovementScript.<FreeRun>c__IteratorD <FreeRun>c__IteratorD = new NinjaMovementScript.<FreeRun>c__IteratorD();
<FreeRun>c__IteratorD.holdTime = holdTime;
<FreeRun>c__IteratorD.<$>holdTime = holdTime;
<FreeRun>c__IteratorD.<>f__this = this;
return <FreeRun>c__IteratorD;
}
可以看出编译器将C#编译为IL时候将yield return XXX这样的语法糖展开成为一