4.4
Hello dear Godot users,
I am Varonex, I have been developing for years using different languages, but my development journey started 7 years ago. I started learning programming using Roblox, as it was the easiest software I could use, with the specs of my old computer back then. I grew my roots in the engine, it took quite a lot of time. Eventually, I got somewhat bored, for various reasons.
I am now seeking a new game engine to use. Despite my blatant artistic skills, I still want to develop games as it is a passion. However, I have quite a few apprehensions regarding all of them.
The biggest question I have been asking myself for quite some time : should I develop on Unity, or should I develop on Godot?
The decade-old question. I have been looking at plenty of videos to try to settle my mind, but I seem to not be satisfied with those. That’s why I’m here to ask you all !
I will divide my concerns in quite a few points throughout this post. Feel free to reply, criticize, give opinions.
1. Language support
Unity is known for its use of .NET, allowing developers to use C# in their projects. Godot has been using GDScript, a python-like, DSL built for the software.
My first concern is that I tested GDScript, and it’s honestly good. I don’t believe I want to program in a language that adopts a python-like structure as I have a really hard time with indentation-defined blocks.
That’s why I want to use C#. I am familiar with it, and I know I can make great usage of it. However I noticed quite a lot of situations where .NET in Godot was deemed slower (and actually sometimes it is faster), especially with Godot’s collections. They needed to bridge internal C++ datastructures with C#, hence the existence of those hybrid collections.
I also noticed that some features (like signals) seem to be quite… Poor in C#.
In GDScript:
mySignal.emit(...)
In C#:
EmitSignal(SignalName, ...)
Same goes with @
decorators. GDScript has @onready
, which makes it way better, combined with $
symbol that helps shorten get_root
. C# however must use GetNode<T>(Path)
, and in the _Ready
method.
Sure Unity has some janky syntax as well, and limitations (like object?.method()
being bad practice because the nullcheck operator wasn’t overloaded on their end)
I don’t know. I feel Unity has better handle over C# as it was designed to be used with it, Godot seems quite experimental.
2. The organization
Godot uses nodes to wrap behavior, and you can combine nodes to create custom scenes, you can further instantiate.
Unity uses prefabs with GameObjects, and you can equip those GameObjects with components. Components are the scripts you write to add custom behavior.
The usage logic isn’t the same, as in Unity, the object keeps the behavior “within itself”, and the hierarchy helps to find out parent/children relations, whereas in Godot, a child node can either be a volontary descendant (e.g a button in a VBox), or additional behavior given to the parent node (e.g collisions)
I understand both, so far I don’t know if one has an advantage over the other.
3. Space & pricing
Well, Godot wins for those ones obviously. Unity is a bulky paid machine, Godot is both lightweight & opensource, under MIT license.
4. Fear of learning curve
I just don’t know which one will be easier to learn. Unity has a, let’s say, poor documentation. I understand the concept & how it works, and I’ll be able to articulate projects in it. Godot has a LOT of node types. The documentation is good, albeit sometimes acking for C# (for obvious support reasons).
There is also sometimes a lack of documented features on Godot. I may be doing poor researches, but the amount of tutorials seems to be poorer.
Overally, I know I want to learn Godot, but the language choice, the amount of nodes & singleton classes, … seem to be quite off. Sometimes I don’t know where to start, whereas with Unity, yes it’s paid, yes it’s bulky, but at least I made a project on it and understood what I did. I also understand Godot, but it feels off to me at some point.
What would you recommend? And how would you approach learning Godot when coming from Roblox studio (and having some Unity background)?
Thanks a lot for your help,
Varonex