Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

何時以及如何避免為任何事情使用節點

建立節點成本低,但建立節點有其限制。一個專案中可能有數以千計的節點,各司其職。當這些節點的行為越複雜,每個節點對專案效能造成的壓力就越大。

Godot 有一些更輕量的物件,這些物件可以用來建立 API,並讓節點使用。在設計如何製作專案功能時,請務必記得有這個選項。

  1. Object :終極輕量物件,原始的 Object。必須要使用手動記憶體管理。也就是說,要建立自己的自定資料結構甚至節點結構並不困難,而且也比 Node 還要輕量。

    • 範例: 請參考 Tree 節點。該節點可為有任意行列的目錄進行高度客製化。用來產生視覺化的資料實際上是通過一個樹狀 TreeItem 物件。

    • 優點: 簡化 API 至更小作用域的物件有助於提升存取性,並改進迭代時間。比起使用整個 Node 函式庫,不如用一組簡短的 Object 來建立子節點,讓節點可產生與管理適當的子節點。

    備註

    在處理這些節點時要注意。我們可以將 Object 存到變數中,但這個參照可能會在沒有警告的情況下失效。舉例來說,若物件的建立者刪除了物件,則下次存取物件的時候便會觸發警告。

  2. RefCounted:只比 Object 複雜一點。它會追蹤自己的參照,只要沒人參照時就自動釋放記憶體。這在大多數自訂類別需儲存資料時很有用。

    • 範例: 請參考 FileAccess 物件。它除了不需要手動刪除外,功能和一般 Object 一樣。

    • 優點: 與 Object 一樣。

  3. Resource :只比 Reference 複雜一點。Resource 自帶將自身物件屬性序列化到 Godot 資源檔案中,以及反過來從資源檔案中反序列化的能力 (即保存與載入功能)。

    • 範例: 腳本、打包場景(用於場景檔案),以及其他類型,例如每個 AudioEffect 類別。這些都可以儲存和載入,因此它們繼承自 Resource(資源)。

    • 優點: 關於 Resource 比傳統資料儲存方法相比, 已經討論過 很多了。在使用 Resource 而不是 Node 的脈路下,主要的優點就是與屬性檢視器的相容性。雖然輕量程度相當於 Object 與 Reference,但 Resource 還可以在屬性檢視器中顯示與匯出屬性。這樣便可讓 Resource 在可用性方面來說填補子節點,也可於沒有在計劃場景中使用太多 Resource 與 Node 時提升效能。