Godot is an open source, MIT licensed games engine which can create both 2D and 3D games. So that means as well as having full access to all the underlying code (in C++), there is also no cost or need to attribute back to Godot. This is a big advantage over other game engines which work on a sliding scale charging model.
There aren’t yet any AAA games using Godot which may put people off using it for anything except a proof of concept but that would be a mistake.
Godot is easy to learn and supports lots of different programming languages. Out of the box you can use C#, C++ or GD script but because of the huge community then you can use most programming languages as someone else has likely added the ability.
One of the useful features of Godot is its ability to create 2D nodes quickly to put a game together through its visual interface.
Godot supports tilemaps for easy level creation. Features of the tilemap feature allow you to select tiles from a sprite sheet, add collision data for each tile, add tile auto layout and randomise tiles. This means the whole experiencing of building a 2D world is simple and fully built in.
Another useful feature is the ability to easily add 2D animations with events. Using a sprite map you can select frames to animate and any other tracks running at the same time. For example you may want to animate a character flashing red when attacked. In fact you can set most properties on the scene to be animated. You can also call a method to be executed.
Godot provides a nice UI for both 2D and 3D design, allowing you to place and move objects around the scene and allowing you to visualise your game while you develop.
Scripting in Godot
You can attach a script in either GD Script or C# to any node on the move tree to allow you to execute functions. There are a number of built in functions you can intercept. For example there is a ready function which is run when a nice is created. There are also update methods which allows you to carry out processing in the game loop.
If you decide to work with GD Script then you can either use the built in IDE which supports code completion, syntax highlighting and help documentation. You also have the option to use an external editor, for example Visual Studio Code. You can install the Godot plug in which then provides full support for GD Script. Take at a look at our hello world page for an example of GD Script.
If you prefer to use C# then you will need to use an external editor, for example Visual Studio Code. You can attach a C# script to any node in the node tree. Once setup in Godot you can simply open your script from the editor.
Based on performance and simplicity I would advise using GD Script. It is a optimised script language created specifically for Godot. This means it is highly performant and well integrated. I would only advise using C# if it is a language, you are familiar with and prefer not to give GD Script a go.
There are two main reasons to use scripting in Godot; the need to add custom functionality to a node and if you need to extend an existing node type.
Structure of Godot
Unlike other gaming engines Godot uses a simple organisational structure of scenes and nodes. A scene consists of a node tree which contains one or more nodes. Both a scene cannot exist without at least one node and nodes can only exist within a scene.
A node tree contains a single root node of any type, which then has child nodes attached. There are lots of built-in node types which cover most of the functionality you will need. If you find you need additional functionality, then you can extend any node using scripting. Godot uses the concept of inheritance to allow you to add functionality through scripting.
A scene is a collection of nodes in a tree which represents both a real and abstract objects. For example, you can have once scene node for a specific level in your game and another scene for your player’s character. If you are familiar with prefabs from other games engines, then you would use a scene in its place. This structural approach means you receive a high level of flexibility without complex organisation structures.
What doesn’t Godot provide?
It is possible to create basic shapes in the Godot editor, however artwork (both 2D and 3D) needs to be created outside of Godot. Any program which can create png files can be used and then the output imported into Godot via a simple drag-and-drop. Both single sprites and sprite sheets can be used.
Likewise for 3D models Godot supports several different formats (glTF 2.0, DAE, OBJ, ESCN, FBX) which can be created in applications like Blender which can then easily be imported. Blender specifically has a Godot plugin which will export the custom ESCN files.
Sounds both background music/noise and sound effects can be played in blender (in 2D and 3D space) will need to be created outside and imported. Wav, Ogg and MP3 file standards are both supported and can be imported in a similar way to artwork.
There is some functionality which Godot doesn’t have built in but can be installed from the asset library. For example 3D terrain creation can be installed to allow you to carry out creation in the editor.