问题分析
直接用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这样的语法糖展开成为一个自动生成的类,默认设置下这个类并不能直接在ILSpy里看到,在ILSpy里选择
View ->

本文探讨了如何使用ILSpy反编译Unity游戏引擎中的C#协程。在反编译过程中,发现协程的结构与源代码有显著差异,特别是在无参数协程的展示上。通过示例代码,展示了反编译后协程的形态,并提供了相关参考资料以供深入研究。
最低0.47元/天 解锁文章
239

被折叠的 条评论
为什么被折叠?



