godot是一个开源的游戏引擎,刚好他要出4.0了,学习一下他的基本功能。

我不会其他的引擎,但是我就是从源码开始,想看下引擎有什么功能。而且我相信他会比Unreal和Unity这种简单很多。

godot官网,godot github,这两个官网。

构建

这个项目使用了c++编写,这很正常,正常游戏引擎都是c++。

scons

这是一个使用scons构建的项目。scons类似于make,区别不大,比cmake偏任务管理一点。这是个python编译工具,所以项目里会有一些python脚本。

SConstruct 是类似 Makefile 的标志性文件,是项目命令的存放处。

输入 scons 一键开始编译,然后运行。它不自带安装,所以我们也不安装了。

删除产物是 scons -c

文件

一个引擎的代码其实是两部分构成的,一部分是编辑器,还有一部分是运行时。特别因为是C++的代码,所以经常需要一个抽象来给这两个不太相同功能的用。

编辑器是一个桌面软件,主要是界面的操作。像 vscode 这种是富文本编辑器。游戏编辑器比富文本还要富一点,但是很多通用的功能会少一点。

运行时是真的引擎,是游戏运行的多媒体环境。要求性能很高,然后还有一个脚本语言的运行时。

所以编辑器是很难做的一个东西。

thirdparty

他用了一些三方库在 thirdparty 文件夹下,都是拷贝源代码。

其中有一些是很基础的,每个发行版会携带的,比如harfbuzz,还有一些是比较前沿的,比如embree。

core

包括了C++语言层面的抽象。众所周知,C++不抽象一套对象什么的东西,浑身难受。

比如各种池,各种异步,跨编译器抽象,设计模式抽象。

driver/platform

这两个是多媒体方面跨平台的功能,分两个文件夹估计因为driver本身是跨平台的。platform更底层一点。

driver里面就是图片,视频,音乐,渲染这种,编辑器引擎都能用。

platform是给最后引擎编译生成的二进制的库,都是安卓ios单独的代码什么的。编辑器用不到,如果你也是编译的,可以看到这里没有 .o 产物文件。

scene

如其名,是场景的功能

modules

最后在编辑器里呈现的功能在modules里面,可以看到里面都是游戏的术语了。

editor

编辑器合体。

main

编辑器之上的cli功能抽象。

server

他甚至还有个server

渲染

渲染用了vulkan

物理

物理用bullet,我都看到了

使用

./godot 打开引擎,是一个项目列表。因为我没有项目,所以这些项目也不知道存放在哪个文件夹下,应该是某个Desktop缓存吧,因为 .local/share/godot 下面已经有东西了。

他还有个模板,可以从官网上下一些模板,不过现在还没有适配4.0的。

这里直接新建一个。

他宣传自己是一个全节点化的引擎,确实,编辑之前需要选择一个根节点,预设了2D,3D,ui节点。确实,开发的时候就2d3d,要上线都是ui。

左下是资源,非常熟悉了。

左上角场景也在很明显的地方。

它和其他引擎一样用的是自己的脚本语言, GDScript 。这个语言有点像Python,反正是个不太行,但是很正宗的脚本语言。

他的脚本也是附着在东西(Actor/Sprite)上的,就还行。

然后我不会了,动手做游戏太难了。有缘再见。