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 中有一個特殊的系統,能夠用來標記一個功能是否可用。每個 功能 都以字串來表示,可以參照下列各種東西:

  • 平台名稱。

  • 平台架構 (64 位元或 32 位元,x86 或 ARM)。

  • 平台型別 (桌面、行動裝置、網頁)。

  • 平台所支援的紋理壓縮演算法。

  • 建置為 debug 還是 release (debug 包含編輯器)。

  • 專案是在編輯器中執行還是以「獨立」二進位檔執行。

  • 許多其他功能。

可以在執行階段透過單例 API 查詢功能標籤:

OS.has_feature(name)

GDExtension 使用作業系統功能標籤來決定要載入的庫。例如,「linux.debug.editor.x86_64」的程式庫將僅在 Linux x86_64 的偵錯編輯器版本上載入。

預設功能

以下列出了 Godot 中大多數的功能標籤。請注意,這些標籤有 區分大小寫

功能標籤

說明

android

在 Android 上運作(非 Web 瀏覽器)

bsd

在 *BSD 上運行(非 Web 瀏覽器)

linux

在 Linux 上運作(非 Web 瀏覽器)

macos

在 macOS 上運作(非 Web 瀏覽器)

ios

在 iOS 上運作(非 Web 瀏覽器)

visionos

在 visionOS 上運作(非 Web 瀏覽器)

Windows

在 Windows 上執行

linuxbsd

在 Linux 或 *BSD 上運作

debug

在除錯建置中執行 (包含編輯器)

release

在發行版本建置上執行

editor

在編輯器建置中執行

editor_hint

在編輯器建置中執行,且於編輯器內部執行

editor_runtime

在編輯器建置中執行,且執行專案

template

在非編輯器建置中執行

double

在雙精度版本建置上執行

single

在單精度版本建置上執行

64

在 64 位元建置上執行 (不限架構)

32

在 32 位元建置上執行 (不限架構)

x86_64

在 64 位元 x86 建置上執行

x86_32

在 32 位元 x86 建置上執行

x86

在 x86 架構建置上執行(不限位元數)

arm64

在 64 位元 ARM 建置上執行

arm32

在 32 位元 ARM 建置上執行

arm

在 ARM 架構建置上執行(不限位元數)

rv64

在 64 位元 RISC-V 建置上執行

riscv

在 RISC-V 架構建置上執行(不限位元數)

ppc64

在 64 位元 PowerPC 建置上執行

ppc32

在 32 位元 PowerPC 建置上執行

ppc

在 PowerPC 架構建置上執行(不限位元數)

wasm64

在 64 位元 WebAssembly 建置上執行(目前尚不支援)

wasm32

在 32 位元 WebAssembly 建置上執行

wasm

在 WebAssembly 架構建置上執行(不限位元數)

mobile

主機作業系統為行動裝置平台

pc

主機作業系統為 PC 平台 (桌上型電腦/膝上型電腦)

web

主機作業系統為網頁瀏覽器

nothreads

在無執行緒支援的環境中執行

threads

在有執行緒支援的環境中執行

web_android

主機作業系統為執行於 Android 的網頁瀏覽器

web_ios

主機作業系統為執行於 iOS 的網頁瀏覽器

web_linuxbsd

主機作業系統為執行於 Linux 或 *BSD 的網頁瀏覽器

web_macos

主機作業系統為執行於 macOS 的網頁瀏覽器

web_windows

主機作業系統為執行於 Windows 的網頁瀏覽器

etc

支援以 ETC1 壓縮紋理

etc2

支援以 ETC2 壓縮紋理

s3tc

支援以 S3TC (DXT/BC) 壓縮紋理

movie

Movie Maker 模式 已啟用

shader_baker

專案已在啟用 shader baking 的情況下匯出(僅適用於已匯出的專案,不適用於在編輯器中執行時)

dedicated_server

專案已匯出為 dedicated server (僅適用於已匯出的專案, 不適用於在編輯器中執行時)

警告

除了紋理壓縮、web_<platform> 以及 movie 這些功能標籤外,預設功能標籤皆為**不可變動**。這表示它們*不會*依據執行時條件而改變。例如,當專案被匯出到 Web 並在行動裝置上執行時,OS.has_feature("mobile") 會返回 false

要判斷匯出為 Web 的專案是否在行動裝置上執行,請使用 OS.has_feature("web_android") or OS.has_feature("web_ios") 來進行檢查。

自定功能

可以在建置中新增自定功能。在 匯出預設 中使用相應的欄位來產生自定功能:

../../_images/feature_tags1.webp

備註

自訂功能標籤只會在運作匯出後的專案中使用(包括 單鍵部署)。從編輯器中運作專案時**不會使用**,即便標記為**可執行**的匯出預設對應的平臺上存在自訂功能標籤。

自訂功能標籤在 EditorExportPlugin 指令碼中同樣不會被使用。相對地,EditorExportPlugin 中的功能標籤會反映編輯器目前執行所在的裝置。

覆寫專案設定

可以用功能來在 [專案設定] 中覆寫指定的組態設定值。這樣一來便能在建置時自定各種設定。

在下列範例中,Demo 版的遊戲使用不同的圖示 (圖示在林一個匯出預設設定中自定,並只會包含 Demo 關卡)。

專案設定面板

所需的組態已選取,這實際上會將其屬性複製到上方的面板 (1)。「demo_build」功能標籤已選取 (2)。組態會被新增到專案設定 (3)。

覆寫後,會針對該設定新增一個專用欄位。

../../_images/feature_tags3.webp

備註

當使用 專案設定的「override.cfg」功能 時 (這與功能標記無關),請記住功能標記仍然適用。因此,如果您希望它們在所有平台和配置上覆寫基礎專案設定,請務必也使用所需的功能標記來覆寫該設定。

預設覆寫

預設已經有許多設定會被覆蓋。專案設定中各個地方都有。

../../_images/feature_tags4.webp

在讀取專案設定時考量功能標籤

預設情況下, 使用一般方式讀取專案設定時 ( ProjectSettings.get_settingProjectSettings.get ), 不會 考量功能標籤。相對地, 必須使用 ProjectSettings.get_setting_with_override

例如,以下列專案設定為例:

[section]

subsection/example = "Release"
subsection/example.debug = "Debug"

使用 ProjectSettings.get_setting("section/subsection/example") 時,不論目前是否為除錯建置都會回傳 "Release"。相對地,ProjectSettings.get_setting_with_override("section/subsection/example") 會遵循功能標籤,若為除錯建置則會回傳 "Debug"

自定建置

可以通過撰寫自定 ExportPlugin 來使用功能標籤自定建置過程。ExportPlugin 也可以用來指定 GDNative 中要載入與匯出哪些共用程式庫。