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.
Checking the stable version of the documentation...
支援平台
與 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 外掛
建立自訂平台連接埠時可以參考官方平台連接埠:
While platform code is usually self-contained, there are exceptions to this rule. For instance, audio drivers that are shared across several platforms and rendering drivers are located in the drivers/ folder of the Godot source code.
建立自定節點
建立自訂平台連接埠是一項艱鉅的工作,需要事先了解平台的 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」類別以自動完成大部分工作。
If the platform is not UNIX-like, you might use the Windows port as a reference.
紋理篩選:
必須在平臺的資料夾中建立一個「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 的嘗試都會被拒絕。
If the target platform supports the graphics APIs in question: Rendering context for Vulkan, Direct3D 12 OpenGL 3.3 or 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)。當為目標平台設定一鍵部署時,此圖示將顯示在編輯器頂部。
If the target platform doesn't support running Vulkan, Direct3D 12, OpenGL 3.3, or OpenGL ES 3.0, you have two options:
Use a library at runtime to translate Vulkan or OpenGL calls to another graphics API. For example, MoltenVK is used on macOS to translate Vulkan to Metal at runtime.
從頭開始建立一個新的算繪器。這是一項艱鉅的工作,特別是如果您想透過進階功能支援 2D 和 3D 算繪。
分發自訂平台端口
危險
在分發自訂平台連接埠之前,請確保您有權分發所連結的所有程式碼。控制台 SDK 通常處於保密協議 (NDA) 之下,這會阻止向公眾重新分發。
平台連接埠被設計為盡可能獨立。大多數程式碼可以保存在“platform/”中的單一資料夾中。與 doc_custom_modules_in_cpp 一樣,這可以透過在 Godot 儲存庫克隆的 platform/ 資料夾中「git clone」平台資料夾來簡化建置過程,然後執行 scons platform=<名稱>``。建置不需要其他步驟,除非需要先安裝第三方平台特定的依賴項。
However, when a custom rendering driver is needed, another folder must be added
in drivers/
. In this case, the platform port can be distributed as a fork of
the Godot repository, or as a collection of several folders that can be added
over a Godot Git repository clone.