Variant 類別
關於
Variant 是 Godot 中最重要的資料型別。在 64 位元平台上僅佔用 24 位元組(32 位元平台為 20 位元組),能夠儲存幾乎所有引擎資料型別。Variant 通常不會長時間持有資料,主要用途為溝通、編輯、序列化,以及一般資料的傳遞。
Variant 可以:
儲存幾乎所有資料型別。
在多個 Variant 之間進行運算(GDScript 以 Variant 作為其原生/基本資料型別)。
可進行雜湊,能迅速與其他 Variant 比較。
可用於安全地在各種資料型別間轉換。
可用於抽象化方法呼叫及其參數(Godot 以 Variant 匯出其所有函式)。
可用來延遲呼叫或在線程間傳遞資料。
可序列化為二進位格式,儲存至磁碟或經由網路傳輸。
可序列化為文字,用於列印數值或可編輯的設定。
可作為匯出屬性,讓編輯器能進行通用編輯。
可用於字典、陣列、剖析器等結構。
基本上,多虧了 Variant 類別,撰寫 Godot 本身變得容易許多,因為它讓 C++ 中少見的高度動態結構能輕鬆實現。現在就來好好認識 Variant 吧。
備註
Variant 內除了 Nil 與 Object 以外的所有型別, 都不能 為 null ,必須始終儲存有效的值。因此這些型別被稱為 不可為 null 的型別。
Variant 型別中的一種是 Nil,僅能儲存 null。因此,即使除了 Nil 與 Object 之外的 Variant 型別皆不可為 null,Variant 仍有可能包含 null 值。
參考資料
Variant 型別清單
Variant 支援以下型別:
型別 |
說明 |
|---|---|
Nil(僅能儲存 |
可為 null 型別 |
AABB 的 2D 對應型別 |
|
Rect2 的 3D 對應型別 |
|
可為 null 型別 |
|
容器:Array 與 Dictionary
Array 與 Dictionary 都是透過 Variant 實作。Dictionary 可將任意型別作為鍵對應至其他任意型別。Array 則僅儲存 Variant 的陣列。當然,Variant 內也能再儲存 Dictionary 或 Array,讓其更加靈活。
對容器的修改會影響所有指向該容器的參照。若需 多執行緒存取,應建立 Mutex 來鎖定。