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.1 升级到 Godot 4.2¶
对于大多数使用 4.1 制作的游戏和应用程序来说,迁移到 4.2 应该相对安全。本页旨在介绍迁移项目时需要注意的所有事项。
破坏性更改¶
如果你要从 4.1 迁移到 4.2,这里列出的破坏性更改可能会影响到你。更改按照领域/系统分组。
警告
Mesh 资源格式在 4.2 中已更改,以允许 顶点和属性压缩 。这个更改可以提高渲染性能,尤其是在受内存带宽限制的平台(例如移动设备)上。
仍然可以加载 Godot 4.0-4.1 Mesh 格式,但在之前的 Godot 版本中 不可能 加载 Godot 4.2 Mesh 格式。打开使用 4.2 之前版本创建的 Godot 项目时,可能会出现一个升级对话框,其中会提供两个选项:
重启并升级: 升级项目中所有网格的网格格式,并将结果保存到磁盘。一旦选择,此选项可以防止将项目降级到 4.2 之前的 Godot 版本。请设置版本控制系统,并在 选择此选项之前 推送你的更改!
仅升级: 升级内存中的网格格式,但不将升级结果写入磁盘。如果将来有需要,这个设置可允许你将项目降级回到 4.2 之前的 Godot 版本。这个设置的缺点是每次加载项目都会变慢,因为每次加载项目时都需要升级网格格式。这些增加的加载时间也会影响导出的项目。 Mesh 资源的数量和复杂度决定了加载时间受影响的程度。
如果该对话框没有出现,请使用编辑器顶端的 项目 > 工具 > 升级网格表面...。
这篇文章指出了每项破坏性改动是否会影响 GDScript,以及 C# 的破坏性改动是 二进制兼容 还是 源代码兼容:
二进制兼容 —— 现有二进制文件无需重新编译即可加载并成功执行,运行时的行为不会改变。
** 源代码兼容** —— 在升级 Godot 时,源代码可成功编译,无需更改。
核心¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
节点 |
||||
常量 |
❌ |
✔️ |
❌ |
动画¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
AnimationPlayer |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
❌ |
❌ |
|
信号 |
✔️ |
❌ |
❌ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
AnimationTree |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
❌ |
❌ |
|
信号 |
✔️ |
❌ |
❌ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
❌ |
❌ |
GUI 节点¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
PopupMenu |
||||
|
✔️ |
✔️ |
✔️ |
|
|
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
RichTextLabel |
||||
方法 |
✔️ |
✔️ |
✔️ |
渲染¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
ImporterMesh |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
❌ |
❌ |
|
MeshDataTool |
||||
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
❌ |
❌ |
|
RenderingDevice |
||||
枚举字段 |
✔️ |
✔️ |
✔️ |
|
枚举字段 |
✔️ |
✔️ |
✔️ |
|
枚举字段 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
✔️ |
✔️ |
|
方法 |
✔️ |
❌ |
❌ |
|
SurfaceTool |
||||
方法 |
✔️ |
✔️ |
✔️ |
文本¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
字体 |
||||
方法 |
✔️ |
❌ |
❌ |
|
方法 |
✔️ |
❌ |
❌ |
|
方法 |
✔️ |
✔️ |
✔️ |
GraphEdit¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
GraphEdit |
||||
属性 |
❌ |
✔️ |
✔️ |
|
方法 |
❌ |
✔️ |
✔️ |
|
属性 |
❌ |
✔️ |
✔️ |
|
属性 |
❌ |
✔️ |
✔️ |
|
GraphNode |
||||
删除了属性 |
❌ |
❌ |
❌ |
|
信号 |
❌ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了方法 |
❌ |
❌ |
❌ |
|
删除了属性 |
❌ |
❌ |
❌ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
删除了属性 |
❌ |
❌ |
❌ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
信号 |
✔️ |
❌ |
❌ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
属性 |
✔️ |
✔️ |
✔️ |
|
删除了属性 |
❌ |
❌ |
❌ |
|
删除了属性 |
❌ |
❌ |
❌ |
TileMap¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
TileMap |
||||
属性 |
❌ |
✔️ |
✔️ |
XR¶
更改 |
GDScript 兼容 |
C# 二进制兼容 |
C# 源代码兼容 |
引入 |
|---|---|---|---|---|
XRInterface |
||||
新增了属性 |
✔️ |
❌ |
❌ |
备注
这一更改破坏了 C# 中的兼容性,因为新属性和现有枚举的名称相冲突,而 C# 绑定生成器优先考虑属性,因此枚举类型由 EnvironmentBlendMode 重命名为 EnvironmentBlendModeEnum。