天天看點

[GODOT]擷取節點

本篇主要記錄godot擷取節點的方法或技巧。

NodePath

NodePath 在将一個節點作為參數導出時非常有用,它會減少此腳本與場景中其他節點的耦合性,保證你建構一個“可以單獨運作的場景”。NodePath的表達方式類似一個檔案路徑,這與GoDot的節點設計哲學十分相符,你可以很簡單的通過路徑表達方式來确定一個節點。在我列出這些表示方法之前,請注意這些路徑的起始為止為腳本所依附的那個節點。

為了更加清晰的表述,現在我設定一個節點結構。如圖所示:

[GODOT]擷取節點

目前腳本挂載在Bullet上

NodePath 表示/文法

使用 @"xxx/xxx/xxx" 可以獲得一個NodePath變量,除了導出節點時,你通常不會直接使用這個類型,想要擷取一個節點時,一般地,可以使用

Node get_node(path: NodePath) const

方法:

# 将會輸出 Bullet
print(get_node(@".").name) 
# 将會輸出 Bullet
print(get_node(".").name)           

在上面的代碼中,第二行中的

@"."

将傳回一個

NodePath

get_node

傳回指定的節點,

print

輸出其名稱。值得注意的是,由于NodePath可以通過字元串直接構造,在第4行中,字元串通過隐式轉換構造為

NodePath

,進而也能夠正确的調用

get_node

我們可以在官方文檔中,找到一個比較全面的

NdePath

的各種寫法:

# 沒有路徑字首表示此路徑是相對于目前節點的
@"A" #子節點A
@"A/B" # A的子節點B
@"." # 目前節點
@".." # 父節點
@"../C" # 兄弟節點C
# 攜帶字首路徑表示場景樹的絕對路徑
@"/root" # 等同于 get_tree().get_root()
@"/root/Main" # 主場景——"Main"(假設主場景的名字為Main)
@"/root/MyAutoload" # 自動加載腳本——MyAutoload(如果有)       

當然,為了更加快捷,建議使用GoDot提供的文法糖,

$

:

print($".".name) # 與print(get_node(".").name) 一緻
print($"Sprite".name) # 與print(get_node("Sprite").name) 一緻           

進一步地,有更加友善的寫法來擷取子節點:

print($Sprite.name)           

export

export(NodePath) var who_shoot_me