CallDeferred();
これを知っているのと知らないとでは全然違う。
これは何か?
すべてのシーンの_Ready()が実行されてから実行するメソッドだ。
これによって、UI等のロードが全て終わったタイミングで実行することができる。
それで、何が嬉しいのかといえば、Getnodeができるようになるという利点がある。
public override void _Ready(){
CallDeferred(nameof(AfterReady));
}
private void AfterReady()
{
}
私の場合は、「シグナル」を使う時にハマって、これを知った。
(ChatGPTが教えてくれた。)
子ノード同士でシグナルを送るとき、相手のノードがまだ読み込まれていないと取得することができず、どうしたもんかと思っていた。全てaddchildが終わってから実行すれば取得できるので1フレーム待つ必要があった。そういうやり方もあるのだが、CallDeferredというものが用意されていた。
これを使うことで無事解決。 まあ詳しくはChatGPTに聞いてみてくれ。