It’s about 10 years I discovered Unity and felt in love. The editor was great but I really liked programming in C#. I allowed me to both organize and creative.
Despite being the among the top 2 suites in the world, I’m increasingly annoyed by them. It became a huge spyware, heavy and the full of annoyances. Beside being super expensive (for Brazilian standards), the pricing model is much less indie-friendly than it’s nemesis, Epic’s Unreal Engine. Users pay upfront instead paying royalties of their own success.
Time to explore new grounds! In fact, I try new stuff all the time. It’s time to land in 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 specially hard on CI/CD. And Linux editor is buggy.
- I was excited by Stride/Xenko, but months after the open source, it was basically abandoned.
- Godot have that annoying scripting language embedded, but the no-go was the lack of a equivalent of ScriptableObject to create data assets.
- O3DE is a possibility for the future. Lua as 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 straight forward. I decided to try it again. Less then 100 mb later, with no need to install or register, I started my -again- first project. The goal was to load data from a 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 joining one of the several jams they organize to motivate myself to finish. No prizes involved, just challenge. Things to explore in order 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 principal that each node have only one script attached instead the super common component-driven approach lacks. Specially trying to design very complex systems using small parts, like the micro-services in the web development. I heard once there are a spin-off that implements this, but there is no traction in the community.
👎 C# integration is still not good. At least in my computer, the editor crashes each 30 min on a random time I hit play. Also, the editor do 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 a external variable every time.
😐 Refereeing nodes in the hierarchy and in 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 a vanilla widespread like C# or C++ is a waste of both newbies and Godot’s own developers 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 the smaller container and less complexity, it takes less then 2 minutes to create a build on any platform. A 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 specially interested in the new external language integration for the upcoming Godot 4.