赞
踩
本文是 关于Godot(About) 章节的第二部分。
本部分由开发者/准备入坑的新人常常问到的问题组成,以问答的方式呈现,挑你感兴趣的看一下,或大致浏览一下即可。
Godot是在OSI-approve的MIT许可下的免费开源软件。这意味着它是免费的。
简而言之:
本文档所有内容都在知识共享许可协议3.0(CC BY 3.0)下发布,署名为“Juan Linietsky, Ariel Manzur和Godot引擎社区”。
Logo和图标一般也在相同的知识共享许可协议下。注意,某些Godot源码包含的第三方库可能会有不同的许可。
详细信息,查看Godot存储库中的COPYRIGHT.txt,LICENSE.txt和LOGO_LICENSE.txt文件。
编辑器支持有:
导出的游戏支持:
32/64位都支持,默认是64位的。官方macOS构建支持Apple Silicon和x86_64。
一些用户也报告说,他们成功地在基于ARM的Linux上构建和使用Godot,比如树莓派(Raspberry Pi)。
由于主机制造商强加的许可条款,Godot团队无法提供开源主机程序导出。无论你使用什么引擎,在主机上发行游戏总是需要大量的工作。你可以在Godot中阅读更多关于主机支持的信息。
Godot官方支持的语言是GDScript,C#和C++。在脚本部分可以看到每种语言的子类别。
若你刚接触Godot或游戏开发,那么推荐学习和使用GDScript语言,因为它是Godot的原生语言。长远来看,脚本语言的性能并不如低级语言,但对于原型制作/开发最小可行产品(mvp,Minimum Viable Products)和快速进入市场(TTM,Time-To-Markets)来说,GDScript会为你提供一种快速,友好且有效的游戏开发方式。
注意,C#的支持相对较新,因此,你可能会在使用过程中遇到一些问题。在Android,iOS和Web平台目前不支持C#。虽然友好且勤奋的开发社区随时准备着解决出现的各种新问题,但由于这是一个开源项目,我们建议你在遇到问题时首先自己做一些应对调查。在公开问题的讨论中进行搜索通常是一种故障排除的好方法。
对于新语言,可以通过第三方用GDExtensions进行支持。(参见下面关于插件的问题)例如,目前正在进行Godot与Python和Nim的非官方绑定。
GDScript是Godot的集成脚本语言。它从头开始构建,以最少的代码最大化Godot的潜力,使新手和专家开发者都能尽可能地利用Godot的优势。如果你以前用过Python这样的语言写东西,你会觉得很熟悉。有关GDScript提供的功能示例和完整概述,查看GDScript脚本指南。
使用GDScript的原因有许多,尤其是当你正在制作原型,处于项目的alpha/beta阶段时,或者不是在制作下一代AAA游戏时。最主要的原因是总体上降低了复杂性。
为Godot创建一个紧密集成的定制脚本语言的初衷有两方面:
由于Godot是一个开源项目,从一开始就必须优先考虑更集成和无缝的体验,而不是通过支持较熟悉的编程语言来吸引额外的用户,特别是当支持那些更熟悉的语言会导致糟糕的体验时。我们能理解你希望在Godot中使用其它语言(参考上面支持的语言)。不过,如果你还没尝试过GDScript,那就先用三天试试。就像Godot一样,一旦你看到了它的强大和它的快速开发,我们认为你就会喜欢上GDScript。
更多关于使用GDScript或动态类型语言的信息可在 GDScript:动态语言介绍 教程中找到。
在早期,该引擎使用Lua脚本语言。由于LuaJIT,Lua可以很快,但是创建面向对象系统的绑定(通过使用回退fallback)是复杂且缓慢的,并且需要大量代码。在用Python做了一些实验后,它也被证实了是难以嵌入的。
为Godot设计一款自定义脚本语言的主要原因是:
GDScript旨在减少上述问题。
你可以在 导入3D场景(Importing 3D scenes) 文档中找到有关支持格式的详细信息,如何从3D建模软件中导出它们,以及如何如何为Godot导入它们。
Godot的目的是创建一个免费和开源的MIT许可引擎,它是模块化且可扩展的。核心引擎开发社区没有计划支持任何第三方、闭源(closed-source)/专有的SDK,因为与这些SDK集成将违背Godot的精神。
也就是说,因为Godot是开源和模块化的,所以没有什么可以阻止你或其他有兴趣的人将这些库添加为模块,并以开源或闭源的方式发布你的游戏。
要了解如何提供你所选的SDK的支持,请看下面插件问题。
如果你知道第三方SDK不被Godot支持,但提供了免费和开源的集成,请考虑自己完成集成工作。Godot不属于任何一个人,它属于社区,它与像你一样雄心勃勃的社区贡献者一起成长。
由于你不需要在系统上实际安装Godot来运行它,这意味着桌面集成不会自动执行。有两种方法可以克服这个问题。你可以从Steam(所有平台)、Scoop(Windows)、Homebrew(macOS)或Flathub(Linux)上安装Godot。这将自动执行桌面集成所需的步骤。
或者,你可以手动执行安装程序为你执行的步骤:
Windows
macOS
将提取的Godot的应用程序拖到 /Applications/Godot.app ,然后将其拖到Dock中。Spotlight会找到Godot,只要它在 /Applications 或 ~/Applications 中。
Linux
在其默认配置中,Godot是半便捷的(semi-portable)。它的可执行文件可以从任何位置(包括不可写的位置)运行,并且不需要管理员权限。
但是,配置文件将被写入用户配置或数据目录中。这通常是一种好方式,但是这意味着如果你复制包含Godot可执行文件的文件夹,那么配置文件会无法跨机器携带。更多信息,参阅 Godot项目中的文件路径 。
若需要完全的便捷式操作(例如在u盘上使用),请按照 自包含,Self-contained 模式的步骤操作。
Godot的首要目标是实现跨平台兼容性和开放标准。OpenGL和Vulkan是在(几乎)所有平台都开放且可用的技术。因为这一设计决策,在Windows上使用Godot开发的项目可以在Linux、macOS等平台上立即运行。
由于Godot只有几个人在处理/开发它的渲染器,我们希望在渲染后端的维护上花费更少的资源。最重要的是,在所有平台上使用单一API可以提高一致性,减少特定平台的问题。
从长远来看,我们可能会为Godot开发Direct3D 12渲染器(主要用于Xbox),但Vulkan和OpenGL仍将是所有平台(包括Windows)的默认渲染后端。
Godot故意不包含那些通过附加组件能实现的特性,除非它们经常被用到。如,高级的人工智能功能。
这有几个原因:
基于上述原因,我们必须对Godot的核心功能进行选择。这就是为什么我们要在将来的版本中将一些核心功能转移到官方支持的附加组件(add-ons)中。就二进制文件大小而言,这样做还有一个好处,那就是你只需为项目中实际使用的内容付费(扩展功能以付费包的形式出现?)。(与此同时,你可以编译自定义的导出模板,禁用未使用的功能,以优化项目的发布大小)
这个问题经常出现,这可能是由于苹果公司最初将其设备分辨率提高一倍时造成的误解。人们通常认为在不同的解决方案中拥有相同的资源是个好主意,所以许多人一直朝着这条道路前进。这种方法只适用于苹果设备,但后来出现了几种具有不同分辨率和宽高比的Android和苹果设备,它们的尺寸和DPI范围非常广。
实现这一目标最常见且最合适的方法是,游戏使用单一的基本分辨率,只处理不同的屏幕宽高比。在2D中非常需要这么做,因为在3D中只是相机XFov或YFov的问题。
就按上面做,你的游戏应该就能在多分辨率下运行。
若你希望让你的游戏也能在小屏幕(宽度小于300像素)的远古设备上运行,你可以使用导出选项来缩小图像,并在 App Store 或 Google Play 中将其设为用于某些特定的屏幕尺寸。
要扩展Godot,例如创建Godot编辑器插件或添加对其它语言的支持,查阅 编辑器插件EditorPlugins 和 工具脚本tool script 部分。
另外,看有关GDExtension的官方博客,这也是一种为Godot开发本机扩展的方法:
这边的successor大概是指一种扩展模块,开发者可以通过该模块去扩展Godot。
你还可以查看GDScript的实现、Godot模块以及对Godot的非官方Python支持。这是了解另一个第三方库如何与Godot集成的一个很好的起点。
当准备好时,参阅 下一个版本何时发布? 章节可看到。
我们建议对新项目使用Godot4.x,但具体还是取决于你的需求,可能3.x会更好。
升级到有些新版本比其他版本更安全。一般来说,是否应该升级取决于项目实际情况。
Awesome!作为一个开源项目,Godot的蓬勃发展得益于像你这样的开发人员的创新和雄心。
开始为Godot做出贡献的最佳方法是使用它并报告您可能遇到的各种任何问题(使用体验?)。一份好的错误报告和清晰复现步骤可也帮助贡献者快速有效地修复bug。(相当于测试并上报bug)
如果你准备好提交一个PR(Pull Request),请从上面链接中选择与你产生共鸣的任何问题,并尝试解决它。你将需要学习如何从源代码编译引擎,或者如何构建文档。你还需要熟悉Git,Godot开发人员使用的版本控制系统。
我们在为贡献者提供的文档上说明了如何使用引擎源代码、如何编辑文档以及其他贡献方式。
我们一直在寻找有关如何改进引擎的建议。用户反馈是我们决策过程背后的主要驱动力,在考虑引擎增强功能时,你在项目工作中可能面临的限制对于我们来说是很好的数据支撑点。
如果你遇到可用性问题或当前Godot版本缺少功能,请首先与我们的社区讨论。可能会有其他的、也许更好的方法来实现社区成员建议的期望结果。你还可以了解到其他用户是否遇到同样的问题,并一起找出好的解决方案。
若你对引擎有定义明确(well-defined)的想法,请随时开一个提案issue。在描述你的问题和建议的解决方案时,尽量具体且具象(不要讲的很抽象)——只有可行的建议才会被考虑。如果你想自己实现它,我们将不胜感激!(当然这不是必需的)
如果你还只有大概的想法,没有具体细节,也可以开启一个提案讨论。讨论的内容可以是任何你想要的内容,并允许自由讨论以寻求解决方案。一旦找到,就可以开启一个提案issue。
请在创建提案前阅读readme文档,以了解有关该流程的更多信息。
是的!Godot具有广泛的内置UI系统,其较小的发型版可以成为Electron或Qt等框架的适当替代。
创建非游戏应用程序时,请确保在项目设置中启用低处理器模式,以减少CPU和GPU使用。
也就是说,我们不建议使用Godot创建移动应用程序,因为移动平台尚不支持低处理器模式。
查看 Material Maker 和 Pixelorama,了解使用Godot制作的开源应用程序的示例。
Godot旨在与其编辑器一起使用。我们建议你尝试一下,因为从长远来看,很可能会节省你的时间。目前还没有计划让Godot用作库,因为这会使引擎的其余部分更加复杂,并且对临时用户来讲会难以使用。
如果你想使用渲染库,请考虑使用建立好的渲染引擎。记住,与Godot相比,渲染引擎的社区通常更小。这将使你更难找到问题的答案。
Godot不使用GTK、Qt或wxWidgets等标准UI工具包。相反,Godot使用自己的UI工具包,使用OpenGL Es或Vulkan进行渲染。该工具包以控制节点(Control nodes)的形式公开,用于渲染编辑器(用C++编写)。这些控制节点还可以在Godot支持的任何脚本语言的项目中使用。
该定制工具包可以从硬件加速中受益,并在所有平台具有一致的外观。最重要的是,它不必处理GTK或Qt附带的LGPL许可警告。最后,这意味着Godot正在"eating its own dog food",因为编辑器本身是Godot UI系统最复杂的用户之一。
eating its own dog food
这是一句英语俚语,常用于描述公司(尤指软件公司)使用自己生产的产品这一情况。
这边指的是Godot的UI工具包,Godot本身就是其用户。自己用自己开发UI工具包。
该自定义UI工具包不能用作库,但你仍然可以使用Godot并通过编辑器来创建非游戏应用程序。
Godot使用SCons构建系统,
且没有计划在未来切换到不同的构建系统。选择SCons而不是其他替代方案的原因有许多。例如:
如果你打算自己构建Godot,请尝试保持开放的心态且至少熟悉一下SCons。
和许多其他库(如Qt)一样,Godot不适用STL。我们相信STL是一个很棒的通用库,但我们对Godot有特殊要求。
我们相信无论如何,游戏都不应该崩溃。如果发生意外,Godot会打印一个错误(甚至可以追溯到脚本),但随后它会尝试尽可能优雅的恢复并继续运行。
此外,异常会显著增加可执行文件的大小。
Godot提供了自己的类型转换(type-casting)系统,可以选择在内部使用RTTI(Runtime Type Identification)。在Godot中禁用RTTI意味着可以实现相当小的二进制文件,而且是在极小的性能成本下。
Godot不使用ECS,而是依赖于继承。尽管没有通用的更好的方法,但我们发现使用基于继承(inheritance-based)的方法可以带来更好的可用性,同时对大多数用例来讲也足够快。
也就是说,没有什么可以阻止你在项目中使用组合(通过创建带有独立脚本的子节点)。接着,在运行时可添加和删除这些节点以动态添加和删除行为。
尽管Godot内部尝试尽可能多地使用缓存一致性,但我们认为用户不需要被迫使用DOD的方式。
DOD主要是一种缓存一致性优化,只有在处理成千上万个对象时才能提供显著的性能改进,这些对象每帧只有很少的改动。也就是说,如果你每帧移动数百个精灵或敌人,DOD不会对性能产生有意义的改进。在这种情况下,你应该考虑采用不同的方式进行优化。
绝大多数游戏不需要这个,Godot提供了方便的助手来完成大多数情况下的工作。
若游戏需要处理如此大量的对象,我们建议使用C++和GDExtensions来处理性能要求较高(performance-heavy)的任务,用GDScript(或C#)来处理其余部分。
参阅 贡献方式 章节。
查阅 Godot网站 的相应页面。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。