[Godot]GDScriptの_ready関数の実行タイミングと実行順序について

Godot

_ready関数を掘り下げる

GDScriptにてGodot側から準備されている関数の中の一つに、_ready関数があります。
恥ずかしながら、こちらの関数は”最初に実行される”位の認識しかなく、厳密な実行タイミングについて理解ができていないので、今回はこの_ready関数の実行タイミングについて深掘りしてみようと思います。

_ready関数は”シーン内の全ノードが準備できたタイミングで実行される

Godotの公式ドキュメントを確認したところ、GDScriptの_ready関数はシーン内の全ノードが準備できたタイミングで実行されるようです。
そのため、_ready関数においてはシーン内の全ノードが既に存在している前提で処理を記載することができます。例えば、シーン内の他のノードの取得処理を記載する等ができます。

シーン内に複数のスクリプトファイルがアタッチされている場合、子ノードから実行される

では、シーン内に複数のスクリプトファイルがアタッチされている場合、_ready関数の実行順に規則はあるのでしょうか。
こちらも公式ドキュメントを確認してみたところ、子ノード→親ノードの順で各ノードにアタッチしたスクリプトファイル内の_ready関数が順番に実行されるようです。

実際に試してみた

こちらについて、_ready関数の実行タイミングと実行順について、実際に試してみました。

まず、以下のような構成でシーンを作成し、各ノードにスクリプトをアタッチします。

各スクリプトにおいては、_ready関数内にprint関数を配置しておきます。

func _ready():
	print("MainNode _ready start.") # ※それぞれアタッチしたノード名に変更している

この状態でシーンを実行すると、以下のようにコンソール出力されました。

ButtonA → ButtonB → SubNode → MainNodeの順で_ready関数が実行されていきました。
公式ドキュメントにあったとおり、子ノード内のノード → 子ノード → 親ノードの順で実行されています。

また、上記例でシーンツリーにおけるButtonAとButtonBのノードの位置を入れ替えたところ、今度は
ButtonB → ButtonA → SubNode → MainNode の順で実行されました。

これより、同一階層にあるノードにおいては、シーンツリーで上から順に_ready関数が実行されていくようです。

まとめ

以上をまとめると、_ready関数の実行タイミングと実行順は以下のようになります。

_ready関数は…

  • シーン内のすべてのノードが準備できたタイミングで実行される。
  • 子ノード → 親ノードの順に実行される。
  • 同じ階層にあるノードにおいては、シーンツリーで上にあるものから順に実行される。

参考URL

Node — Godot Engine (stable)の日本語のドキュメント

タイトルとURLをコピーしました