I come from quite a bit of experience with Unity 3D, which was my first foray into the world of 3D. I did some tutorials, took some training, experimented a lot, built some tools for work, even got certified. Unity was great for me.
Then all the meme-worthy Unity stuff happened with tools being deprecated before the new stuff was finished, Asset Store content having nonsense licensing and people stealing and selling other peoples stuff. The the company got stock-listed and got a CEO with an interesting past. Then they started beefing up the company value by acquiring smaller companies with tangentally relevant profiles.
I started feeling like the company behind Unity was beginning to care more about their shareholders than their clients... Oh, and then they raised their prices. Pft.
Anyway, so now I'm trying out Godot, and I gotta say, I'm actually very impressed with it! Sure, it doesn't have all the bells and whistles that Unity has, and it may not be ready for AAA productions and such, but it has got it where it counts!
Prefabs vs scenes
In Unity, there are scenes, and scenes can be prefabs. If you were to mimic Godot's notion that everything is a scene, then you would have everything be a prefab, and only have a single root prefab in your scene.
This would be interesting to try out, but I never really liked Unity's prefabs because of the ways overrides are handled. You can add a prefab to the scene tree, but then you can mess with everything in that "instance" of the prefab, and soon, you'll have a huge mess.
Like with anything, I can of course just stop doing dumb things, but if you follow popular Unity tutorials, you'll be taught to throw everything in the scene graph, and then maybe springle in some prefabs here and there, and that soon becomes a pain.
In Godot, however, everything is a scene, and all scenes are like prefabs, except you don't get to override things at whim. You can pass in variables and properties from the outside, but the internals of an instantiated scene is controlled by that scene definition.
This is awesome, because it lets you work on your components (scenes) in isolation, and makes it simple to setup test scenes to try things out and validate behaviour. If it works in that scene, then it'll work in the next scene, because the instances of the component will be the same.
It also seems that working with 2D assets in Godot is simpler than in Unity. I suppose it is a matter of what you're used to, but for me - when following tutorials - the Godot implementation clicked for me in a way that the Unity tools never did.
I have yet to try out shaders, post-processing, etc. So I don't have much to share there. Unity has the shader graph, which is a nice drag-n-drop way of working with shaders and getting visual feedback for each step/node in the graph. It doesn't seem like Godot has similar functionality like that by default. But it does have a shader editor with a bit of autocomplete, which is cool, though I'll be doing the coding in Rider.
The final, really big thing that I love about working with Godot over Unity, is that Unity has become soooo slow. It seems like C# compilation and linking is really holding Unity back. I don't know all the details, but part of it may be due to the fact that you can extend the unity editor with tools and gadgets and stuff. The C# code needs to compile and run for the Unity editor to play nice.
In Godot, if you're working with C#, it seems that things are much more loosely coupled. The Godot editor works independently of what is going on in the C# code. Sure, if I define an
Export variables (Like a
SerializeField), I'll need to build the solution before Godot will be able to see the field, but otherwise, they're separate and independant. This is such a blessing, because the Godot UI is pretty fast to work with, and there are no annoying loading-bar dialogs getting in your way, that you have to sit and wait several minutes for.
Down the road
I'll definitely be giving Godot some more attention and see if I can find something to be mad about, but so far, it seems like a delightful light-weight alternative to Unity, and with less of a let's-please-our-shareholders outlook on the future.