Trying Godot Engine Again
It’s about 10 years since I discovered Unity and fell in love. The editor was great, but I liked programming in C#. It allowed me to be both organized and creative.
Despite being among the top 2 suites in the world, I’m increasingly annoyed by them. It became big spyware, heavy and full of annoyances. In addition to being super expensive (for Brazilian standards), the pricing model is much less indie-friendly than its nemesis, Epic’s Unreal Engine. Users pay upfront instead of paying royalties for their success.
Time to explore new grounds! To be honest, I try new stuff all the time. It’s time to land on new grounds! Some criteria to consider:
- Open source preferred, almost required.
- Small footprint if possible.
- Pro developer tools, like CI/CD headless compilation.
- Big community or organization supporting it. The lack of big support is an abandoned project wannabe.
So for the past months, I tried to play with several options. Notably:
- Unreal is unbearably gigantic (7gb+), which hits especially hard on CI/CD. And the Linux editor is buggy.
- I was excited by Stride/Xenko, but months after put as open source, it was abandoned as far I can tell.
- Godot has that annoying scripting language embedded, but the no-go was the lack of an equivalent of ScriptableObject to create data assets.
- O3DE is a possibility for the future. Lua as a scripting language is a personal nostalgia.
Spark of hope
Then I read an article about creating data assets in Godot. It used C#. It was not a trick or complex. Pretty straightforward. I decided to try it again. Less than 100 Mb later, with no need to install or register, I started my -again- the first project. The goal was to load data from an asset created using C# code, just like a ScriptableObject in Unity. The test was a success.
So it’s time to try to create a full prototype game! I’m planning to join one of the several jams they organize to motivate myself to finish. No prizes are involved, just for the challenge. Things to explore to be conformable with:
- Client-server multiplayer.
- Scene streaming.
Another idea is to recreate an old game of mine: PICubic. It was not commercially released, so it might be a good way to learn and expect results.
Some general thoughts
After a week that I’m playing with it. Some thoughts:
👎 The design principle is that each node has only one script attached instead of the super common component-driven approach lacks. Especially trying to design complex systems using small parts, like the microservices in web development. I heard once that there is a spin-off that implements this, but there is no traction in the community.
👎 C# integration is still not good. At least on my computer, the editor crashes each 30 min at a random time I hit play. Also, the editor does not display custom C# classes in the inspector. I design several vanilla classes to organize the code, but I had to transform them into Resources to be able to edit their data.
👎 Linking assets in the editor does not respect the class restriction. One could insert a Player asset instead Weapon and the editor will not complain. I have to check before using an external variable every time.
😐 Refereeing nodes in the hierarchy and the asset folder are two distinct things. Nodes in the hierarchy are accessed by NodePath while prefabs (here called PackedScenes) have a different type.
😐 GDScript: focusing on a custom language instead of vanilla widespread like C# or C++ is a waste of both newbies’ and Godot’s own developer’s energy.
👍 The everything is a scene approach fascinates me. I always thought this way in Unity: scenes are just a special prefab.
👍 Creating an automatic build pipeline on GitLab was a breeze. Due to the smaller container and less complexity, it takes less than 2 minutes to create a build on any platform. An empty Unity project takes this time just to download the 4gb+ image and at least 5 more minutes to compile.
The project development is somewhat slow for my taste, but they are receiving more and more financial support in the last months that might enable them to accelerate the pace. I’m especially interested in the new external language integration for the upcoming Godot 4.