Godot 4.1 學習筆記

专心Coding的程侠發表於2024-03-13

godot % 啟用場景唯一名稱 這個怎麼用的,給我舉點例子。
onready var sect_rect = $"%SectRect
這個節點可以在場景中的任意位置透過在節點路中為其加上”%”字首來訪問。
點選禁用。 什麼“場景中的任意位置透過在節點路中”???



好的,用更具體的例子來說明如何在Godot中使用%字首來訪問具有唯一名稱的節點。

場景結構示例

假設我們的Godot專案有一個場景,場景結構如下:

  • MainScene
    • Player (玩家節點)
    • Enemies (敵人容器節點)
      • Enemy1 (敵人1)
      • Enemy2 (敵人2)
    • UI
      • HealthBar (生命條)
      • Score (分數)
        在這個場景中,假設我們想要在不同的指令碼中訪問HealthBar節點,但是由於遊戲開發過程中的變動,HealthBar的位置可能會發生變化。為了方便地訪問它,我們可以給HealthBar設定一個唯一名稱。

設定唯一名稱

在Godot編輯器中,選中HealthBar節點,然後在節點的屬性皮膚中找到“節點”部分下的“名稱”欄位,輸入一個唯一識別符號,比如UniqueHealthBar。這個名稱就是我們將要使用%字首來引用的唯一名稱。

使用%字首訪問節點

現在,無論HealthBar在場景樹中的具體位置如何變化,我們都可以在任何指令碼中透過以下方式訪問它:

# 使用唯一名稱和%字首來獲取HealthBar節點的引用
onready var health_bar = $"%UniqueHealthBar"

這行程式碼意味著,不管HealthBar節點在場景樹中的位置如何變化,只要它的唯一名稱是UniqueHealthBar,我們就可以透過%UniqueHealthBar來找到它,並將其儲存在health_bar變數中。

訪問示例

假設你想在玩家受到傷害時更新生命條,你可以這樣做:

func take_damage(amount):
    health_bar.value -= amount  # 假設health_bar有一個'value'屬性表示生命值

在這個例子中,即使HealthBar的位置在場景樹中改變,或者我們從另一個場景中訪問它,使用%UniqueHealthBar都能保證我們正確無誤地引用到HealthBar節點。
透過這種方式,%字首成為了訪問場景中具有唯一名稱節點的強大工具,大大提高了程式碼的靈活性和可維護性。希望這個例子能幫助你更好地理解如何使用%字首來訪問節點。



####直接在其他場景裡面 %UniqueHealthBar.value -=amount ??
直接在其他場景中使用 `%UniqueHealthBar.value -= amount` 這種方式來訪問和修改節點可能會有一些誤解。實際上,即使是使用唯一名稱訪問節點,也需要在指令碼中先獲取該節點的引用,然後才能對其進行操作。這是因為Godot中的指令碼通常是附著在特定的場景或節點上的,因此你需要在該指令碼或相關聯的指令碼中明確引用節點。 以下是一個在其他場景中安全訪問和操作具有**唯一名稱`UniqueHealthBar`節點**的方法: ### 第一步:在新場景的指令碼中獲取節點引用 在你的新場景中,比如一個叫`SecondScene`的場景,假設你想根據某些事件改變`HealthBar`的值。首先,你需要在這個場景的指令碼檔案中獲取`UniqueHealthBar`節點的引用。通常這是透過`onready`關鍵字完成的,以確保場景完全載入後才訪問節點: ```gdscript # 在SecondScene的指令碼中 onready var health_bar = $"%UniqueHealthBar" ``` ### 第二步:修改節點屬性 獲取節點引用後,你就可以像在原始場景中一樣操作這個節點了: ```gdscript func decrease_health(amount): health_bar.value -= amount ``` 這個函式`decrease_health`可以根據你的需要在遊戲邏輯中被呼叫,以減少生命值。 ### 注意點: - 確保新場景被載入和例項化時,帶有唯一名稱`UniqueHealthBar`的節點是存在的。否則,`$"%UniqueHealthBar"`將返回`null`,嘗試訪問`null`引用的屬性會導致執行時錯誤。 - `%UniqueHealthBar`的方式是全域性性的,適用於專案內的任何場景,只要這些場景在執行時是處於活躍狀態的,並且節點名稱沒有重複。 透過這種方式,你可以在專案中任何地方訪問和修改具有唯一名稱的節點,而不用擔心節點在場景樹中的具體位置。但請記得,這種方法依賴於專案內部節點名稱的唯一性和節點在訪問時的存在性。

意思就是 有唯一的 UniqueHealthBar 節點

相關文章