Godot v3.5 から Unique nameという地味に便利な機能が追加されたので、その機能を紹介します
目次
Unique nameによるノードアクセスについて
今までのノードアクセスの問題点
今まで、Godotでは以下のようなノード構造があった場合……
“Label3” にアクセスするためには、階層をたどって「$」または get_node() でアクセスする必要がありました
extends Node2D
func _ready() -> void:
# $を使う場合
var label = $Label1/Label2/Label3
# get_node()を使う場合
#var label = get_node("Label1/Label2/Label3")
label.text = "hoge"
このあたりについて、詳しくは以下のページに書いています
【Godot】シーンとノードについてただ、この方法には以下の2つの問題点があります
- ノード階層が変わった(階層を移動した)場合に、該当する部分すべてを修正する必要がある
- 階層が深いとアクセスするパス(文字列)が長くなる
これらの問題を解消するために、v3.5 で実装されたのが、「Unique name」の仕組みです
Unique nameによるアクセスの設定方法
Unique nameを使うには、ノードの上で右クリックします。すると「%Access as Scene Unique Name」と表示されるのでこれを選びます(※現在は未翻訳っぽいので、いずれ翻訳されて別の文字に変わるかもしれません…)
するとノード名の右隣りに「%」と表示されます。これが表示されれば「Unique name」が有効となります
Unique nameのノードにスクリプトでアクセスする (get_node())
スクリプトの記述は簡単で、get_node() で引数に “%Label3” を指定します。
extends Node2D
func _ready() -> void:
# ユニーク名ノード "%Label3" を取得する
var label = get_node("%Label3")
label.text = "hoge"
これでノードがどの階層に存在しても、短い名前でアクセスできるようになります
Unique nameのノードにスクリプトでアクセスする (「$」を使う)
なお「$」を使った書き方は以下の通りとなります
extends Node2D
func _ready() -> void:
var label = $"%Label3"
label.text = "hoge"