Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
支援平台¶
與 doc_custom_modules_in_cpp 類似,Godot 的多平台架構的設計方式允許在不修改任何現有原始碼的情況下建立平台連接埠。
獨立於引擎分發的自訂平台連接埠的一個範例是`FRT <https://github.com/efornara/frt>`__,它針對單板電腦。請注意,該平台移植目前針對 Godot 3.x;因此,它不使用 Godot 4 中新增的 class_DisplayServer 抽象化。
建立自訂平臺移植可能有以下原因:
您想要 將您的遊戲移植到控制台,但希望自己編寫平台層。這是一個漫長而艱鉅的過程,因為它需要與控制台製造商簽署保密協議,但它允許您完全控制控制台移植過程。
您想要將 Godot 移植到目前不支援的奇異平台。
如果您對建立自訂平台連接埠有疑問,請隨時在「Godot 貢獻者聊天 <https://chat.godotengine.org/channel/platforms>」的「#platforms」頻道中提問。
備註
Godot 是一款具有現代要求的現代化引擎。即使您只想在目標平台上運作簡單的 2D 專案,它仍然需要大量內存,這使得它無法在大多數復古控制台上運作。作為參考,在 Godot 4 中,一個沒有任何可見內容的空專案需要大約 100 MB 的 RAM 才能在 Linux 上運作(無頭模式下為 50 MB)。
如果您想在記憶體嚴重受限的平台上執行 Godot,較舊的 Godot 版本的記憶體需求較低。移植過程類似,但 class_DisplayServer 並沒有從 class_OS 單例中分離出來。
官方 Git 外掛¶
建立自訂平台連接埠時可以參考官方平台連接埠:
雖然平台程式碼通常是獨立的,但此規則也有例外。例如,跨多個平台和渲染後端共享的音訊驅動程式位於 Godot 原始碼的 drivers/ 資料夾 中。
建立自定節點¶
建立自訂平台連接埠是一項艱鉅的工作,需要事先了解平台的 SDK。根據您需要的功能,所需的工作量會有所不同:
平臺移植需要的功能¶
至少,平台連接埠必須具有實作的 class_OS 單例中的方法,以便可建置並可用於無頭操作。平台資料夾中也必須存在「logo.svg」 (32×32) 向量圖。對於針對相關平台的每個匯出預設,此旗標會顯示在「匯出」對話方塊中。
請參閱 '這個實作 <https://github.com/godotengine/ godot/blob/master/platform/linuxbsd/os_linuxbsd.cpp>'__ 作為 Linux/*BSD 平臺的範例。另請參閱“OS singleton header <https://github.com/godotengine/ godot/blob/master/core/os/os.h>”__ 以供參考。
備註
如果您的目標平台是類 UNIX 的,請考慮繼承「OS_Unix」類別以自動完成大部分工作。
如果平台不是類 UNIX,您可以使用「Windows 連接埠 <https://github.com/godotengine/godot/blob/master/platform/windows/os_windows.cpp>」作為參考。
紋理篩選:
必須在平臺的資料夾中建立一個「detect.py」檔,並實現所有方法。SCons 需要此檔才能將平台檢測為有效的編譯選項。請參閱 Linux/*BSD 平臺的 'detect.py 檔 <https://github.com/godotengine/ godot/blob/master/platform/linuxbsd/detect.py>“__ 作為範例。
detect.py
應實作如下所有方法:
is_active()
:可用於暫時停用平台建置。這通常應該總是返回“True”。get_name()
:以字串形式傳回平台的使用者可見名稱。“can_build()”:如果主機系統能夠為目標平台建構,則返回“True”,否則返回“False”。請勿在此處進行緩慢檢查,因為當使用者要求平台列表時會查詢此檢查。請使用“configure()”進行廣泛的依賴性檢查。
get_opts()
:傳回使用者可以為此平台定義的 SCons 建置選項列表。get_flags()
:傳回該平台覆蓋的 SCons 旗標列表。configure()
:執行建置配置,例如根據所選的 SCons 選項選擇編譯器選項。
平臺移植的可選功能¶
實際上,如果您想在螢幕上看到任何內容並處理輸入裝置,無頭操作是不夠的。您可能還需要大多數遊戲的音訊輸出。
此清單中的一些連結指向Linux/*BSD平臺實現作為參考。
一個或多個 DisplayServers,已實作視窗方法。 DisplayServer 還涵蓋滑鼠支援、觸控螢幕支援和平板電腦驅動程式(用於筆輸入)等功能。請參閱 DisplayServer 單例標頭 以供參考。
對於不具有完整視窗支援的平台(或如果它與您正在製作的連接埠無關),大多數視窗功能可以大部分未實作。這些函式可以僅檢查視窗 ID 是否為“MAIN_WINDOW_ID”,並且調整大小等特定操作可能與平台的螢幕解析度功能(如果相關)相關。任何建立或操作其他視窗 ID 的嘗試都會被拒絕。
如果目標平台支援相關圖形 API: Vulkan 的渲染本文,OpenGL 3.3 或OpenGL ES 3.0。
`鍵盤<https://github.com/godotengine/godot/blob/master/platform/linuxbsd/x11/key_mapping_x11.cpp>`__ 和`控制器<https://github.com/godotengine/godot/ 的輸入處理程式blob/master/platform/linuxbsd/joypad_linux.cpp>`__。
一個或多個「音訊驅動程式<https://github.com/godotengine/godot/blob/master/drivers/pulseaudio/audio_driver_pulseaudio.cpp>`__。音訊驅動程式可以位於「platform/」資料夾中(這是針對 Android 和 Web 平台完成的),或者如果多個平台可能使用此音訊驅動程式,則位於「drivers/」資料夾中。請參閱 AudioServer 單例標頭 以供參考。
當機處理程式,用於在遊戲當機時列印當機回溯。這樣可以更輕鬆地在不易存取紀錄的平台上進行故障排除。
匯出處理程式 (用於從編輯器匯出,包括 單鍵部署)。如果您打算僅從編輯器匯出 PCK,則不需要,然後透過重命名它以配對 PCK 檔案來直接執行匯出範本二進位檔案。請參閱 EditorExportPlatform 標頭 以供參考。如果為目標平台實作了 doc_one-click_deploy ,則平台資料夾中應存在「run_icon.svg」(16×16)。當為目標平台設定一鍵部署時,此圖示將顯示在編輯器頂部。
如果目標平台不支援運作 Vulkan、OpenGL 3.3 或 OpenGL ES 3.0,您有兩個選擇:
在運作時使用庫將 Vulkan 或 OpenGL 呼叫轉換為另一個圖形 API。例如,MoltenVK 用於在 macOS 上在運作時將 Vulkan 轉換為 Metal。
從頭開始建立一個新的渲染器。這是一項艱鉅的工作,特別是如果您想透過進階功能支援 2D 和 3D 渲染。
分發自訂平台端口¶
警告
在分發自訂平台連接埠之前,請確保您有權分發所連結的所有程式碼。控制台 SDK 通常處於保密協議 (NDA) 之下,這會阻止向公眾重新分發。
平台連接埠被設計為盡可能獨立。大多數程式碼可以保存在“platform/”中的單一資料夾中。與 doc_custom_modules_in_cpp 一樣,這可以透過在 Godot 儲存庫克隆的 platform/ 資料夾中「git clone」平台資料夾來簡化建置過程,然後執行 scons platform=<名稱>``。建置不需要其他步驟,除非需要先安裝第三方平台特定的依賴項。
但是,當需要自訂渲染後端時,必須在「drivers/」中新增另一個資料夾。在這種情況下,平台連接埠可以作為 Godot 儲存庫的分支進行分發,或者作為可以透過 Godot Git 儲存庫克隆新增的多個資料夾的集合進行分發。