Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
从 Godot 4.0 升级到 Godot 4.1¶
对于大多数使用 4.0 制作的游戏和应用程序来说,迁移到 4.1 应该相对安全。本页旨在介绍迁移项目时需要注意的所有事项。
破坏性更改¶
如果你要从 4.0 迁移到 4.1,这里列出的破坏性更改可能会影响到你。更改按照领域/系统分组。
警告
GDExtension API 在 4.1 中完全不兼容,因此未列入下表。更多信息请参见 将 GDExtension 更新到 4.1 部分。
这篇文章指出了每项破坏性改动是否会影响 GDScript,以及 C# 的破坏性改动是 二进制兼容 还是 源代码兼容:
二进制兼容 —— 现有二进制文件无需重新编译即可加载并成功执行,运行时的行为不会改变。
** 源代码兼容** —— 在升级 Godot 时,源代码可成功编译,无需更改。
核心¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
Basis |
||||
|
✔️ |
✔️ |
✔️ |
|
Object |
||||
|
✔️ |
❌ |
❌ |
|
Transform3D |
||||
|
✔️ |
✔️ |
✔️ |
|
UndoRedo |
||||
|
✔️ |
✔️ |
✔️ |
|
WorkerThreadPool |
||||
|
✔️ |
❌ |
✔️ |
动画¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
AnimationNode |
||||
|
❌ |
❌ |
❌ |
|
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
AnimationNodeStateMachinePlayback |
||||
|
✔️ |
❌ |
❌ |
2D 节点¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
PathFollow2D |
||||
移除了 |
❌ |
❌ |
❌ |
3D 节点¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
Geometry3D |
||||
方法 |
✔️ |
✔️ |
❌ |
|
MeshInstance3D |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
Node3D |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
GUI 节点¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
CodeEdit |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
Tree |
||||
方法 |
✔️ |
✔️ |
✔️ |
物理¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
Area2D |
||||
属性 |
❌ |
❌ |
❌ |
|
Area3D |
||||
属性 |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState2D |
||||
方法 |
❌ |
❌ |
❌ |
|
PhysicsDirectSpaceState3D |
||||
方法 |
❌ |
❌ |
❌ |
渲染¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
RDShaderFile |
||||
方法 |
✔️ |
❌ |
❌ |
|
RenderingDevice |
||||
方法 |
✔️ |
✔️ |
❌ |
|
RenderingServer |
||||
方法 |
✔️ |
❌ |
❌ |
|
SurfaceTool |
||||
方法 |
✔️ |
✔️ |
❌ |
网络¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
WebRTCPeerConnectionExtension |
||||
方法 |
✔️ |
❌ |
✔️ |
编辑器插件¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
---|---|---|---|---|
AnimationTrackEditPlugin |
||||
|
❌ |
❌ |
❌ |
|
EditorInterface |
||||
|
✔️ |
❌ |
❌ |
|
方法 |
✔️ |
❌ |
❌ |
|
方法 |
✔️ |
❌ |
❌ |
|
EditorResourcePreviewGenerator |
||||
|
❌ |
❌ |
❌ |
|
|
❌ |
❌ |
❌ |
|
EditorUndoRedoManager |
||||
|
✔️ |
✔️ |
✔️ |
行为更改¶
4.1 中引入了一些行为的更改,你可能需要调整项目。
更改 |
引入 |
---|---|
SubViewportContainer |
|
当输入事件应传播到 SubViewport 及其子节点时, |
|
如果多层 |
|
Viewport |
|
启用 Physics Picking 的 |
将 GDExtension 更新到 4.1¶
GDExtension 仍处于测试阶段。在它被标记为稳定版之前,升级到新的 Godot 小版本时可能会出现兼容性问题。
为了修复一个严重的错误,在 Godot 4.1 中,我们不得不在很大程度上打破二进制兼容性,在很小程度上打破源代码兼容性。
这意味着为 Godot 4.0 制作的 GDExtensions 将需要为 Godot 4.1 重新编译(使用 godot-cpp 的 4.1
分支),并对其源代码稍作修改。
在 Godot 4.0 中,你的“entry_symbol”函数应该是这样:
GDExtensionBool GDE_EXPORT example_library_init(const GDExtensionInterface *p_interface, const GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) {
godot::GDExtensionBinding::InitObject init_obj(p_interface, p_library, r_initialization);