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...
從 Godot 4.2 升級到 Godot 4.3
對於大多數以 4.2 製作的遊戲和應用程式來說,升級到 4.3 應該相對安全。本頁將說明專案升級時需要注意的所有事項。
做出更改
如果你要從 4.2 升級到 4.3,這裡列出的不相容變更可能會影響到你的專案。變更內容依領域/系統分類整理。
這篇文章指出了每項破壞性改動是否會影響 GDScript,以及 C# 的破壞性改動是 二進位相容 還是 原始程式碼相容:
二進制相容 - 現有的二進制檔案無需重新編譯即可成功載入和執行,且運行時的行為不會改變。
** 原始程式碼相容** —— 在升級 Godot 時,原始程式碼可成功編譯,無需更改。
GDExtension
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
GDExtension |
||||
方法 |
❌ |
❌ |
❌ |
|
方法 |
❌ |
❌ |
❌ |
|
方法 |
❌ |
❌ |
❌ |
由於這些方法實際上無法被有效利用,因此已將其移除。請改用 GDExtensionManager::load_extension 和 GDExtensionManager::unload_extension 來正確載入與卸載 GDExtension。
動畫
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
動畫 |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
動畫混合器(AnimationMixer) |
||||
方法 |
✔️ |
❌ |
❌ |
|
Skeleton3D |
||||
方法 |
✔️ |
❌ |
✔️ |
|
訊號 |
❌ |
❌ |
❌ |
|
BoneAttachment3D |
||||
方法 |
✔️ |
✔️ |
✔️ |
建立節點
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
AcceptDialog |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
物理
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
PhysicsShapeQueryParameters3D |
||||
屬性 |
❌ |
❌ |
❌ |
備註
在 C# 中,列舉 PhysicsServer3D.G6DofJointAxisFlag 因綁定產生器解析列舉前綴方式而導致相容性問題。在 GH-89851 中新增的成員會讓該列舉的成員名稱被重新命名。
算繪
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
算繪 |
||||
列舉欄位 |
✔️ |
❌ |
❌ |
|
列舉欄位 |
✔️ |
❌ |
❌ |
|
列舉欄位 |
✔️ |
❌ |
❌ |
|
列舉欄位 |
✔️ |
❌ |
❌ |
|
列舉欄位 |
✔️ |
❌ |
❌ |
|
列舉欄位 |
✔️ |
❌ |
❌ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
RenderingServer |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
RenderSceneBuffersRD |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
備註
雖然 RenderingDevice.InitialAction 及 RenderingDevice.FinalAction 中的列舉值已改變,但唯一會使用它們的方法(draw_list_begin)已新增相容舊值的支援。因此實務上並不會破壞相容性。
備註
在 C# 中,列舉 RenderingDevice.DriverResource 由於綁定產生器解析列舉前綴的方式,當 GH-83452 新增新成員時會造成成員名稱被重新命名,進而導致相容性問題。
文字
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
字型 |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
TextServer |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
TextServerExtension |
||||
方法 |
❌ |
❌ |
❌ |
音訊
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
AudioStreamPlaybackPolyphonic |
||||
方法 |
✔️ |
✔️ |
✔️ |
圖塊地圖(TileMap)
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
TileData |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
XR
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
WebXRInterface |
||||
方法 |
✔️ |
❌ |
✔️ |
|
XRServer |
||||
方法 |
✔️ |
❌ |
❌ |
編輯器外掛程式
改動 |
GDScript 格式化字串 |
C# 二進位相容 |
C# 原始程式碼相容 |
簡介 |
|---|---|---|---|---|
EditorInspectorPlugin |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
EditorPlugin |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
EditorSceneFormatImporterFBX |
||||
型別已更名為 |
❌ |
❌ |
❌ |
做出更改
In 4.3, some behavior changes have been introduced, which might require you to adjust your project.
核心
備註
二進位序列化已調整,修復了腳本物件與型別化陣列序列化的相關問題(詳見 GH-78219)。這會導致舊有腳本編碼/解碼的相容性中斷。
備註
PackedByteArray 現在能使用更精簡的 base64 編碼來儲存資料。但這樣會影響相容性,代表舊版 Godot 可能無法開啟由 4.3 儲存的資源(詳見 GH-89186)。
為了最大化相容性,目前僅對包含大量 PackedByteArray 的資源與場景啟用這個新儲存格式。未來此格式也會陸續回補至舊版 Godot 的修補更新中。待所有支援中的 Godot 版本都能讀取新格式後,將逐步淘汰相容性措施,讓所有資源與場景都採用新格式。
備註
於 C# 中,Transform3D.InterpolateWith 的實作已修正為先進行旋轉、再進行縮放的正確運算順序(詳見 GH-89843)。
備註
於 C# 中,Aabb.GetSupport 的實作已修正,現在能正確回傳支撐向量(詳見 GH-88919)。
備註
於 C# 中,Variant 型別的 ToString 實作現在預設會使用 InvariantCulture``(詳見 `GH-89547`_),這代表像 ``Vector2(1.2, 3.4) 這樣的格式,無論作業系統語言為何,都會以 . 作為小數點分隔符。
動畫
備註
AnimationMixer 的捕捉(Capture)模式已被全新設計的捕捉功能所取代,效能與可靠性都大幅提升,並且也取代了原有的快取機制(詳見 GH-86715)。
備註
AnimationNode 取得語意時間資訊的流程已重構。這確保與時間相關的行為能如預期運作,但也改變了混合(blending)行為。實作 _process 虛擬方法的開發者請注意,此方法已被標記為過時,未來將會有新方法取而代之(詳見 GH-87171)。
關於動畫相關變更的更多資訊,請參考《Migrating Animations from Godot 4.0 to 4.3 <https://godotengine.org/article/migrating-animations-from-godot-4-0-to-4-3>》。
建立節點
備註
預設字型外框顏色已由白色改為黑色(詳見 GH-54641)。
備註
auto_translate 屬性已廢棄,請改用現在新增至 Node 的 auto_translate_mode 屬性(詳見 GH-87530)。auto_translate_mode 的預設值為 AUTO_TRANSLATE_INHERIT,代表節點會繼承父節點的翻譯模式。這表示,原本有設定 auto_translate = true 的節點,如果其父節點 auto_translate 為 false,可能就不會再被自動翻譯。
多人連線
備註
SceneMultiplayer 的快取協定已改為在發送節點移除確認封包時,傳送收到的 ID,而非節點路徑(詳見 GH-90027)。
此為高階多人連線協定的不相容變更,與舊版 Godot 並不相容。請同時將你的伺服器與客戶端一併升級到 Godot 4.3,才能正常運作。
請注意,高階多人連線設施僅設計給相同 Godot 版本的伺服器與客戶端共同使用。建議你在專案中實作版本檢查機制。
算繪
備註
貼花(Decal)現在會將調變(modulate)顏色從 sRGB 色彩空間轉換為線性色彩,與其他輸入一致,以確保正確的混色效果(詳見 GH-89849)。如果你的專案有用到貼花的調變屬性,將會發現畫面有些微變化。
備註
已導入反向 Z(Reverse Z)深度緩衝技術。這可能會讓部分著色器(Shader)出現不相容。請參考《Introducing Reverse Z (AKA I'm sorry for breaking your shader) <https://godotengine.org/article/introducing-reverse-z/>》一文,取得更多資訊與修正建議。
圖塊地圖(TileMap)
Android
備註
Android 權限不會再自動請求,因為這不符合官方建議的最佳實踐(詳見 GH-87080)。請自行在 OS 使用 request_permission 方法,並透過 MainLoop 的 on_request_permissions_result 訊號來請求權限並等待使用者回應。