[Godot]GDScriptの”onready”キーワードの意味

Godot
注意

こちらの記事はGDodt3.xでのGDScriptに関するものとなります。
Godot4.xでは、アノテーションを利用した記述となります。
Godot4.xでのアノテーションについては、 こちら で解説しています。

“onready”キーワードの意味と使い方

GDScriptには”onready”というキーワードがあります。
“onready”キーワードは、ノードを取得する際に使用されます。例えば、スクリプト冒頭に以下のような感じで記載されたりします。

onready var buttonA = get_node("ButtonA")

これはスクリプトの冒頭でノードを取得する際に利用されているのですが、この”onready”キーワードについて理解が不十分だったので、少し調べてみました。

onreadyを使用した変数定義は_ready関数内での変数定義と同じ

まず、結論からお伝えすると、”onready”キーワードをつけた変数宣言は、_ready関数上に記載しているのと同じ意味となります。冒頭で挙げたコードは、以下と同じ意味となります。

func _ready():
	var buttonA = get_node("ButtonA")

つまり、”onready”キーワードをつけた変数宣言により、_ready関数上でのコード記載量を削減できるというわけです。

“onready”をつける必要があるのは、ノードを取得する場合

“onready”キーワードの説明としては以上なのですが、もう少し深掘りします。

“onready”をつけないで変数を定義するとエラーが発生したり、逆にonreadyをつけていなくてもエラーにならない場合があります。

onready var i = 1	# エラー発生しない
var j = 1			# エラー発生しない

onready var buttonB = get_node("ButtonB")	# エラー発生しない
var buttonA = get_node("ButtonA")			# これはエラーが発生する

こちらも結論から言うと、スクリプトファイル冒頭の変数定義において、ノードの取得処理が複jまれている場合は”onready”キーワードが必要となります。
この理由としては、ノードの取得が実施可能になるタイミングの問題と関係があります。

ノードの取得は、シーン内で対象のノードの準備ができたタイミングにならないと実施できません。
この、”ノードの準備ができたタイミング”というのが_ready関数が実行されるタイミングとなるため、ノードの取得処理を含む変数定義に関しては、_ready関数内に記載するのと同義となる”onready”キーワードの記載が必須となるわけです。

※_ready関数とノードの準備に関しては、以下の記事で解説しています。

まとめると、スクリプトファイル冒頭での変数宣言において、このエラーが発生する/しないの違いは、以下となります。

  • ノードの取得をする場合(get_node関数の場合)、”onready”キーワードをつけないとエラーとなる
  • ノードの取得以外の変数宣言の場合、”onready”キーワードをつける必要はない。(※ただし、つけてもエラーにはならない)

参考URL

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

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