Godot yield坑
yield最常用的做法之一就是,等待某个信号发送
有点类似rust和go里的管道channel,但是godot里貌似对这样的用法有很多无法解释的问题
比如下面:同时运行 n1 和 n2 并等待他俩结束,在注释掉20行的时候,一切正常,但是取消注释后,14行的 yield end就不执行了



如果换成 n2 注释不执行,只执行 n1 ,n1内部有两个yield,那结果也是正常的

猜测结论就是:在调用链路 如果有多个yield方法中,某个方法有多个子yield的情况 会导致父链路的上下文状态丢失
这提醒我们,在godot中使用yield时要非常小心,如果大量使用yield,可能会造成无法挽回的调试灾难
在Godot4中,整个协程改为了await 方法,这样就不能再获取到 Gdscriptfunctionstate 了,这样的确解决了问题,也解决了使用场景
如果要实现类似TriggerByAny或者TriggerByAll这样的方法时,必须要优先考虑使用信号进行包装会更为稳妥

