经过四个月的工作, Godot 4.1 正式发布啦!新版本带来了一系列新功能,例如改进的人工智能导航,以及分离代码编辑器并将其放在其他显示器上的能力。
此版本的重点改动:
节点操作更快
Godot 游戏被构建为节点树,这是游戏实体引擎的基础构建块,因此操作节点是引擎需要极其频繁执行的操作,会直接影响开发速度。
- 4.1 版本更改了算法,使用快速哈希图,使添加和删除子节点的速度提高了数倍。
- 此版本还为场景引入了实验性的多线程功能,新的节点属性可以完全控制节点的处理方式(顺序或并行)。
目前还不建议在生产中使用多线程,但它为充分利用现代硬件奠定了基础。
核心优化
之前将模型导入Godot时,经常会出现模型面朝后的问题。
几位开发者联合修复了该问题,主要是在编辑器中交换前后摄像头方向。此外, look_at() 函数现在有一个参数,可以使用模型空间作为向前查看的参考,而不是相机的负 Z 轴。
此更新还为 Lawnjelly 的 Godot 4 带来了帧增量平滑功能,可以显著提高运动的流畅性并提供更流畅的游戏体验。该选项默认启用,但请注意,它仅在垂直同步也启用时才有效。
Scripting 脚本编写
GDScript
现在可以创建并使用静态变量。静态变量在类而不是每个实例上存储数据,因此它们在类的每个实例之间共享。
要使变量成为静态变量,请在脚本顶部定义的变量前面添加 static
关键字。
GDScript 的一个重要功能是为命名类自动生成文档页面。
此版本包括对 ocean 系统的重新设计,现在将枚举视为类型,从而使生成的文档更加精确。
现在还可以使用内联文档字符串,而不必总是将它们放置在变量或函数定义之上。
var my_variable = 10 ## This is an inline docstring
C#/.NET
使用 GDScript 时,可以通过向脚本添加全局类名来定义要在编辑器中使用的新节点类型。
从 Godot 4.1 开始,在 C# 中也可以通过将 [GlobalClass] 属性添加到文件中来实现,还可以使用 [Icon] 属性为全局类提供唯一的图标。
但截至此版本,使用 C# 制作的项目仍然无法导出到移动和 Web 平台,这一限制的解决可能取决于 2023 年底 .NET 8 的发布。
GD扩展
Godot 拥有独特的技术,可以使用 C++ 等低级语言作为游戏脚本语言,而无需重新编译引擎。
此版本的技术仍处于测试阶段,但 GDExtension 在脚本功能方面更接近 GDScript 和 C#,现在可以实现新的视觉着色器节点并使用 GDExtension 创建编辑器插件。
此版本还实现了向后兼容系统,以确保即使 API 在未来版本中发生变化,为 Godot 4.1 编写的代码也能够继续工作。
另一方面,为了修复 GDExtension 中的关键问题,4.1 中需要进行重大的兼容性破坏,因此现有的 Godot 4.0 扩展需要针对 4.1 进行移植和重新编译。
编辑器
Godot 4 支持多窗口,可将其用于项目和编辑器设置以及各种弹出窗口。从这个版本开始,可以将文档分离到浮动窗口中,分离脚本编辑器(包括着色器编辑器),并将它们放置在单独的显示器上。
此外,编辑器现在将跟踪窗口布局,在闭并重新打开编辑器时,编辑器窗口会恰好位于上次关闭的位置。
从 Godot 4.1 开始,还可以将节点数组导出到检查器,对于将游戏对象链接在一起非常有用。
项目管理器现在允许为各个项目分配标签,并按标签过滤项目。使得搜索数十个甚至数百个 Godot 项目变得更加容易。
渲染
此版本中对粒子湍流进行了重新设计,以提供更好的创意控制。
湍流被广泛用于创建许多现代游戏中常见的丰富蔓延效果。
使用新的 3D 噪点纹理还可以轻松控制体积雾的密度,并使其在某些区域变薄。 NoiseTexture3D 则可用于创建粒子吸引矢量场,这对于模拟影响粒子的风很有用。
导航
Godot 4.0 引入了 AI 导航的实时避让,但仅限于单个平面。4.1 版本包括使用 smix8 完全重写的回避算法,提供更好的行为和更好的控制,现在可以在 2D 或 3D 中进行回避。
平台支持
4.1 仍然提供与 Godot 4.0 相同的平台支持:可以使用标准版本和.NET 版本的引擎导出到所有桌面平台,如果项目中不使用 C#,则可以导出到移动设备和 Web。
Web 导出仍然存在一些限制,WebGL 2 支持不佳的浏览器(例如 macOS 上的 Chrome)会遇到一些问题,如果没有 Google 的修复,或在支持专WebGL 1 / GLES2 渲染器方面投入大量精力,Godot 也无法解决这些问题。
更新公告:https://godotengine.org/article/godot-4-1-is-here/