欢迎光临散文网 会员登陆 & 注册

Godot yield坑

2022-12-20 11:00 作者:enigmaxp  | 我要投稿

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这样的方法时,必须要优先考虑使用信号进行包装会更为稳妥

Godot yield坑的评论 (共 条)

分享到微博请遵守国家法律