Godot基于何种GUI库实现?

Godot 不使用标准的 GUI 工具箱,如 GTK、Qt 或 wxWidgets。相反,Godot 使用自己的用户界面工具包,使用 OpenGL ES 或 Vulkan 进行渲染。这个工具包以控件节点(Control)的形式暴露出来,用于渲染编辑器(用 C++ 编写)。这些控制节点也可以在 Godot 支持的任何脚本语言的项目中使用。

这个定制的工具包使它能获益于硬件加速,并在全平台上拥有一致的外观。最重要的是,它不必处理 GTK 或 Qt 所带来的 LGPL 许可注意事项。最后,这意味着 Godot 在“自产自用”,因为编辑器本身就是 Godot UI 系统中最复杂的用例之一。

这个自定义 UI 工具包不能作为一个库使用,但你仍然可以通过使用 Godot 编辑器来创建非游戏应用程序。

Godot为什么要造GDScript,而不是使用已经存在的、有广泛用户的语言?

为 Godot 创建一个紧密集成的自定义脚本语言的原因有两点:首先,它减少了启动和运行Godot 所需的时间,使开发人员能够快速上手引擎,提高了生产力;其次,它减少了维护的总体负担,减少了问题的维度,并允许引擎的开发人员专注于排除错误并改进与引擎核心相关的功能——而不是花费大量时间来尝试在一大堆语言中获得一小组增量功能。 由于 Godot 是开源项目,因此从一开始就必须优先考虑更加集成和无缝的体验,而不是通过支持大多人熟悉的编程语言来吸引更多用户——特别是在支持那些大多人熟悉的语言会导致更糟糕的体验时。我们理解你更想在 Godot 中使用其他语言(请参阅上面支持的选项列表)。话虽如此,如果你还没试过 GDScript,先试三天。就像 Godot 一样,一旦你看到它有多强大并且开发多迅速,我们认为你将对 GDScript 刮目相看。

为 Godot 创建自定义脚本语言的主要原因有:

  1. Godot 使用多线程,而大多数脚本虚拟机对线程的支持不佳(Lua、Python、Squirrel、JavaScript、ActionScript 等)。
  2. 大多数脚本语言(Lua、Python、JavaScript)的虚拟机没有很好地支持类扩展,适配 Godot 工作方式的效率极低。
  3. 许多现有语言的 C++ 绑定接口都非常糟糕,会产生大量代码、错误、瓶颈,而且效率普遍低下(例如 Lua、Python、Squirrel、JavaScript 等)。我们希望专注于一个更好的引擎,而不是大量的缝合。
  4. 没有原生的向量类型(vector3、matrix4 等),导致使用自定义类型实现时,性能大大降低(Lua、Python、Squirrel、JavaScript、ActionScript 等)。
  5. 在大部分解释型编程语言(Lua、Python、JavaScript、ActionScript 等)中,垃圾收集器会导致延迟或不必要的大内存使用。
  6. 难以与 Godot 代码编辑器集成从而支持代码补全、动态编辑等(其他语言都这样)。但这方面 GDScript 支持得很好。

GDScript 是为了减少上述问题以及防止更多问题而设计的。

Godot官方教程中用很多篇幅描述了GDScript的必要性,然而开发者并不太买账。
在我看来,无法使用一个现有语言的主要缺点包括:

  1. 无法使用该语言生态中的库。
  2. 开发者需要学习一门新语言
  3. GDScript用途过于有限,仅能用于一个游戏引擎

造出GDScript虽然对于Godot作者来说简单了很多,但是对于Godot用户来说却变复杂了一些。

Godot的历史

2001年Godot开始开发,2014年开源,最初是由一家阿根廷游戏工作室内部开发。