自訂平台移植
如同 以 C++ 自訂模組,Godot 的多平台架構設計允許你在不修改現有原始碼的情況下,建立自訂平台移植。
有一個獨立於引擎本體發佈的自訂平台移植範例為 FRT,其目標為單板電腦。請注意,該平台移植目前僅支援 Godot 3.x,因此並未使用 Godot 4 新增的 DisplayServer 抽象層。
你可能想建立自訂平台移植的原因包括:
你想要 將你的遊戲移植至主機平台,但希望自行撰寫平台層。這是相當長且艱鉅的過程,因為必須與主機製造商簽署保密協議(NDA),但這樣你可以完全掌握移植流程。
你想將 Godot 移植到目前尚未支援的特殊平台。
如果你對建立自訂平台移植有任何問題,歡迎在 Godot 貢獻者聊天室 的「#platforms」頻道中發問。
備註
Godot 是一款現代化的引擎,對硬體有現代等級的需求。即使你只打算在目標平台上執行單純的 2D 專案,仍需消耗足夠的記憶體,使其無法在大多數復古主機上運作。以 Godot 4 為例,在 Linux 上執行一個空白專案約需 100 MB RAM(無頭模式約 50 MB)。
如果你想在記憶體非常有限的平台上運行 Godot,可以考慮使用較舊版本的 Godot,其記憶體需求較低。移植流程大致相同,唯一差異是舊版 Godot 並未將 DisplayServer 從 OS 單例中分離。
官方平台移植
建立自訂平台移植時,可參考官方平台移植的實作:
雖然平台程式碼通常是獨立的,但也有例外。例如,跨多平台共用的音效驅動與算繪驅動程式,會被放在 Godot 原始碼的 drivers/ 資料夾 中。
建立自訂平台移植
建立自訂平台移植是一項龐大的工程,需要事先熟悉該平台的 SDK。你所需的功能越多,所需投入的工作量也會隨之增加:
平台移植必備功能
最低限度,平台移植必須實作 OS 單例中的方法,才能進行建置並支援無頭模式運作。此外,平台資料夾內必須有一個 logo.svg (32×32像素)向量圖,這個圖示將出現在匯出預設檔案中。
請參考 Linux/*BSD 平台的 這個實作 作為範例,也可參考 OS 單例標頭。
detect.py 檔案
你必須在平台資料夾下建立 detect.py 檔案並實作所有方法。SCons 需要這個檔案來判斷平台是否為可用的編譯選項。可參考 Linux/*BSD 平台的 detect.py 檔案。
detect.py 內應實作下列所有方法:
is_active():可用於暫時停用該平台建置。通常應永遠回傳True。get_name():回傳平台在使用者介面可見的名稱字串。can_build():如果主機系統能建置該平台,則回傳True,否則回傳False。不要在這裡放慢速檢查,因為這會在使用者查詢平台清單時執行。請改用configure()進行較完整的相依檢查。get_opts():回傳該平台可由使用者自訂的 SCons 建置選項清單。get_flags():回傳此平台會覆寫的 SCons 旗標清單。configure():執行建置組態,例如根據 SCons 選項自動選擇編譯器參數。
平台移植的選用功能
實務上,如果你要顯示畫面並處理輸入裝置,僅有無頭模式是不夠的。對大多數遊戲來說,也需要音效輸出功能。
本清單中的部分連結以 Linux/*BSD 平台實作為參考。
一個或多個 DisplayServer,需實作視窗管理相關方法。DisplayServer 也涵蓋滑鼠、觸控螢幕、繪圖板(筆輸入)等功能。可參考 DisplayServer 單例標頭。
對於不具備完整視窗系統的平台(或你的移植不需要完整視窗支援),大部分視窗相關函式可以保持未實作。其功能僅需檢查視窗 ID 是否為
MAIN_WINDOW_ID,如調整大小等操作可直接對應到平台的螢幕解析度功能(如適用)。其他視窗 ID 的建立或操作可直接拒絕。
如果目標平台支援相關圖形 API: 需實作 Vulkan、Direct3D 12、OpenGL 3.3 或 OpenGL ES 3.0 的算繪上下文。
一個或多個 音效驅動。音效驅動可以放在
platform/資料夾(如 Android、Web 平台),或若多平台共用則可放於drivers/資料夾。可參考 AudioServer 單例標頭。當機處理器,可於遊戲當機時列印回溯,有助於在無法直接取得日誌的平台上進行除錯。
文字轉語音驅動 (提升無障礙性)。
匯出處理器 (用於從編輯器匯出,包含 單鍵部署 功能)。如果你只需從編輯器匯出 PCK 並直接執行範本二進位檔,則不必實作匯出處理器。可參考 EditorExportPlatform 標頭 。若實作 單鍵部署 ,平台資料夾應包含
run_icon.svg(16×16),此圖示會顯示於編輯器上方。
如果目標平台不支援運行 Vulkan、Direct3D 12、OpenGL 3.3 或 OpenGL ES 3.0,你有兩種選擇:
於執行時使用函式庫將 Vulkan 或 OpenGL 呼叫轉換為其他圖形 API。例如,macOS 上會用 MoltenVK 將 Vulkan 呼叫即時轉換為 Metal。
從零開始設計新的算繪器。這是非常大的工程,尤其是如果你要同時支援進階 2D 與 3D 算繪功能。
發佈自訂平台移植
危險
在發佈自訂平台移植前,請確認你有權分發所有連結到的程式碼。主機平台 SDK 通常受 NDA 保護,禁止對外公開散布。
平台移植設計上儘量自給自足。大多數程式碼都能放在 platform/ 子資料夾內。與 以 C++ 自訂模組 類似,只需將平台資料夾 git clone 到 Godot 專案的 platform/ 目錄,執行 scons platform=<名稱> 就能建置。除非需要安裝第三方依賴,否則不需其他步驟。
但如果需要自訂算繪驅動,就必須在 drivers/ 資料夾下新增其他目錄。這種情況下,可以將平台移植作為 Godot 倉庫的 fork 發佈,或作為多個可套用到 Godot 倉庫 clone 的目錄組合發佈。