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# 源代码兼容 |
引入 |
---|---|---|---|---|
动画 |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
动画混合器 |
||||
方法 |
✔️ |
❌ |
❌ |
|
3D骨骼 |
||||
方法 |
✔️ |
❌ |
✔️ |
|
信号 |
❌ |
❌ |
❌ |
|
3D骨骼附属 |
||||
方法 |
✔️ |
✔️ |
✔️ |
GUI 节点
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
AcceptDialog |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
物理
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
PhysicsShapeQueryParameters2D |
||||
属性 |
❌ |
❌ |
❌ |
备注
在 C# 中,枚举 PhysicsServer3D.G6DofJointAxisFlag
由于绑定生成器检测枚举前缀的方式而破坏了兼容性。在 GH-89851 中向该枚举添加了新成员,导致枚举成员被重命名。
渲染
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
RenderingDevice |
||||
枚举字段 |
✔️ |
❌ |
❌ |
|
枚举字段 |
✔️ |
❌ |
❌ |
|
枚举字段 |
✔️ |
❌ |
❌ |
|
枚举字段 |
✔️ |
❌ |
❌ |
|
枚举字段 |
✔️ |
❌ |
❌ |
|
枚举字段 |
✔️ |
❌ |
❌ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
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 |
||||
类型重命名为 |
❌ |
❌ |
❌ |
行为更改
4.3 中引入了一些行为的更改,你可能需要调整项目。
核心
备注
二进制序列化已被修改,以修复脚本化对象和类型化数组的序列化问题(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) 模式替换为新的捕获 (Capture) 功能,该功能比旧版本效果更好,这取代了现有的缓存(GH-86715)。
备注
AnimationNode
重新设计了获取语义时间(semantic time)信息的过程。这确保了时间相关的行为能够按预期工作,但也改变了混合行为。实现 _process
虚方法的开发者还应注意,该方法现已弃用,未来将被新方法取代(GH-87171)。
有关动画更改的更多信息,请参阅`将动画从 Godot 4.0 迁移到 4.3 <https://godotengine.org/article/migrating-animations-from-godot-4-0-to-4-3>`__ 文章。
GUI 节点
备注
默认字体轮廓颜色从白色更改为黑色(GH-54641)。
备注
auto_translate
属性已被弃用,取而代之的是现在位于 Node
中的 auto_translate_mode
属性(GH-87530)。 auto_translate_mode
的默认值为 AUTO_TRANSLATE_INHERIT
,这意味着节点会从其父节点继承 auto_translate_mode
值。因此,如果现有节点的 auto_translate
属性设置为 true
,但其父节点的 auto_translate
属性设置为 false
,那么这些节点可能不再被翻译。
多人游戏
备注
SceneMultiplayer
的缓存协议已更改,在发送节点移除确认数据包时,现在会发送接收到的 ID 而不是节点路径(GH-90027)。
这是对高级多人游戏协议(high-level multiplayer protocol)的破坏性改动,该改动会使其与之前的 Godot 版本不兼容。请将你的服务器和客户端版本都升级到 Godot 4.3 以妥善处理此更改。
请注意,高级多人游戏(high-level multiplayer)功能仅与使用相同 Godot 版本的服务器和客户端兼容。建议实现某种版本检查机制。
渲染
备注
现在,贴花会将调制颜色从 sRGB 颜色转换为线性颜色,与所有其他输入一致,以确保正确的混合效果(GH-89849)。使用贴花调制属性的现有项目会注意到其视觉效果发生了变化。
备注
现已实现反向 Z 深度缓冲技术。这可能会破坏某些着色器的兼容性。请阅读 反向 Z 简介 (又名:很抱歉破坏了你的着色器) 文章,了解更多信息并获取修复常见场景的指导。
TileMap
Android
备注
Android 权限不再自动请求,因为这违反了推荐的最佳实践(GH-87080)。请使用 OS
中的 request_permission
方法和 MainLoop
上的 on_request_permissions_result
信号来请求权限并等待用户响应。