Table of contents:

  1. First look
  2. Language
  3. Editor
  4. Integration with native APIs
  5. Summary

First Look

The first info aboutr Godot Engine I got from my friend when we start chatting about game development. It was a log discussion about which engine to choose, and my friend mentioned Godot Engine as good for start, good for prototyping, fast and open source. After our talk I was just curiose and took a look at at the topic, even though I was not convinced at the beginning.

Concept of Godot Engine can be confused, because it was very different from any engine but for me it was just fun.

TPS Demo
TPS Demo

I started following the development of the Godot Engine on github. I liked how active and open the community is and how everything keep improving. It’s a really impressive example that shows how cool open source is and that it can be a real win for everyone.

Language

Godot brings its very own GDScript language, it also brings support for C++ and C# on top of Mono. Yet, GDScript seems like the best option as it deeply integrates with the engine so most times code for the same functionality will be much simpler in GDScript. Also, most of the materials you’ll find over the Internet is based on GDScript. So, as long as you’re not a daily C++ or C# developer, you should probably pick GDScript.

GDScript also comes with optional types. The notation is similar to Python’s typing, but you can only use native types along with classes, that you can access either by making them global with class_name keyword or loading using const … = preload('…'). There is no generics, interfaces and other things that you expect to find in a strongly typed language.

Editor

Godot has own editor for both visual stuff and scripting. What’s impressive is that the editor itself is fully written in Godot. It works good and has a lot of features for example animation editor, visual editor for scenes and UI. Easy build samples.

Editor
Editor

2D Pixel-Art Jellyfish with Live Simulated Tentacles - Made in Godot 3.4.

For writing scripts we can use an external editor like Visual Studio Code, Emacs, Vim.

Example code in GDScript:

# bot_stats.gd
extends Resource
export(int) var health
export(Resource) var sub_resource
export(Array, String) var strings

# Make sure that every parameter has a default value.
# Otherwise, there will be problems with creating and editing
# your resource via the inspector.
func _init(p_health = 0, p_sub_resource = null, p_strings = []):
    health = p_health
    sub_resource = p_sub_resource
    strings = p_strings

# bot.gd
extends KinematicBody

export(Resource) var stats

func _ready():
    # Uses an implicit, duck-typed interface for any 'health'-compatible resources.
    if stats:
        print(stats.health) # Prints '10'.

Example code in C#:

// BotStats.cs
using System;
using Godot;

namespace ExampleProject {
    public class BotStats : Resource
    {
        [Export]
        public int Health { get; set; }

        [Export]
        public Resource SubResource { get; set; }

        [Export]
        public String[] Strings { get; set; }

        // Make sure that every parameter has a default value.
        // Otherwise, there will be problems with creating and editing
        // your resource via the inspector.
        public BotStats(int health = 0, Resource subResource = null, String[] strings = null)
        {
            Health = health;
            SubResource = subResource;
            Strings = strings ?? new String[0];
        }
    }
}

// Bot.cs
using System;
using Godot;

namespace ExampleProject {
    public class Bot : KinematicBody
    {
        [Export]
        public Resource Stats;

        public override void _Ready()
        {
            if (Stats != null && Stats is BotStats botStats) {
                GD.Print(botStats.Health); // Prints '10'.
            }
        }
    }
}

Integration with native APIs

TL;DR: if there’s an existing plugin, it’s easy. If not, you’re on your own.

Godot does not bring too many platform-specific integrations. If you want to integrate analytics, push notifications, social media integrations etc, you won’t find any of these stuff within the core so you’ll need to rely on plugins. A lot of useful plugins don’t even exist yet.

Summary

This is my first look after using Godot for a few days now. Probably it will be a good engine to work with on the next project. I don’t know yet how to build a smooth experience around core game gameplay. But definitely, I will try ;) **

Reference:

  1. Godot Engine GitHub reposiotory
  2. GDScript style guide
  3. Exploring Cross-Platform Mobile Game Development With Godot Engine
  4. Godot releases