Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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

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

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

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

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

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

    備註

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

  2. Reference :只稍微比 Object 複雜一點。Reference 會追蹤自己的參照,然後只在沒有任何參照到自己時才刪除載入的記憶體。這種類別適用於大多數自定類別中需要資料的情況。

    • 範例: 請參考 File 物件。該物件的功能除了不需要手動刪除以外,就像一般的 Object 一樣。

    • 優點: 與 Object 一樣。

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

    • 範例: Script, PackedScene (用於場景檔案) 與其他如各個 AudioEffec 類別之類的型別。這些類別都可以載入與保存,因此都是從 Resource 繼承來的。

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