Godot yield坑
yield最常用的做法之一就是,等待某個(gè)信號(hào)發(fā)送
有點(diǎn)類似rust和go里的管道channel,但是godot里貌似對(duì)這樣的用法有很多無法解釋的問題
比如下面:同時(shí)運(yùn)行 n1 和 n2?并等待他倆結(jié)束,在注釋掉20行的時(shí)候,一切正常,但是取消注釋后,14行的 yield end就不執(zhí)行了



如果換成 n2 注釋不執(zhí)行,只執(zhí)行 n1 ,n1內(nèi)部有兩個(gè)yield,那結(jié)果也是正常的

猜測(cè)結(jié)論就是:在調(diào)用鏈路 如果有多個(gè)yield方法中,某個(gè)方法有多個(gè)子yield的情況 會(huì)導(dǎo)致父鏈路的上下文狀態(tài)丟失
這提醒我們,在godot中使用yield時(shí)要非常小心,如果大量使用yield,可能會(huì)造成無法挽回的調(diào)試災(zāi)難
在Godot4中,整個(gè)協(xié)程改為了await 方法,這樣就不能再獲取到 Gdscriptfunctionstate 了,這樣的確解決了問題,也解決了使用場(chǎng)景
如果要實(shí)現(xiàn)類似TriggerByAny或者TriggerByAll這樣的方法時(shí),必須要優(yōu)先考慮使用信號(hào)進(jìn)行包裝會(huì)更為穩(wěn)妥