Moving to Godot

moving_2_godot.png

Like for many people Unity was the first port of call when thinking about making games. Free (up until large incoming sales), big community, lots of features. At the time (2013) I was still learning programming so the solid tutorials and low barrier of entry made it a simple choice. GameMaker felt like I’d find it too limiting, Unreal engine didn’t have a free tier yet and who was I to question the indie game darling.

This made sense at the time but as time passed and we working on Questionable Systems as a team some shortcomings started to emerge, some of which were things we knew Unity was working on but were reasons we wanted to switch. We both loved the idea of Godot - OSS, node-based and a less legacy baggage. Some major reasons:

Version Control

I know there are solutions and best practices but I don’t find the way Unity works with git workable. I’m sure if this were my full time job we’d find a better solution but it’s too easy to break something with a messy merge and it started to become a deal breaker. Scenes were too chunky and not atomised enough to make merge conflicts manageable, creating duplicate work to fix. It often meant work got divided into one of us making an asset and needing to hook it up on master to avoid a messy merge if anything else changed.

Now don’t get me wrong, Godot isn’t perfect at this. The one big thing we’ve found so far is you need to really think about who’s working on what scene because major node tree changes cause very messy merge conflicts. The node structure makes it much easier to have tiny atomised scenes, so ensuring a small team isn’t breaking the same thing at once is far easier. Scene files are pretty human readable/fixable in most minor conflict cases.

OSS

Unity is for obvious reasons not interested in changing their structure when they’re about to go public; however, an open source game engine is a huge selling point. It’s a developer tool at its core. Yes games are made by interdisciplinary teams, but being able to checkout what’s happening under the hood often saves time. Let me give an example.

I was using the fairly recent Godot feature for Inverse Kinematics (IK) to make a player character hold onto a handle that moved. When I “stopped” the IK node it was causing what I thought was weird behaviour - the player’s arm still faced towards the handle, with the last direction the IK function put on it, instead of moving to rest. Now I thought this was strange and did a bunch of debugging like I would with Unity - cramming in print statements to give me the state of each bone in the arm to see what I was missing. Then it occured to me… just check the IK code and see what it does and doesn’t do! Cool so it puts on a global override tranform and then when you “stop” it simply suspends processing the node. Well that’s fine I can just remove the overrides, problem solved.

The documentation here wasn’t great, but the code was understandable. Now this feature as an example is clearly not in a final state so I’m not surprised its missing some docs. With Unity when I’ve had a problem the docs didn’t answer I had to hope someone on the forums had worked it out or just continue debugging in the editor.

Other points

  • The Unity linux editor has been very much improved in recent years; however, it’s not what I’d call completely stable. We ended up bumping Unity versions a couple of times in Croissant development, which caused problems, but it was necessary to get editor bugfixes. The version we ended up with still had some pretty bad linux bugs which wasn’t encouraging. Godot works super nice on linux.

  • The godot community seems super nice and supportive so far.

  • No legacy baggage. Unity had quite a few features that were in the process of being updated but in the meantime hadn’t seen any love in a long time. The input system in particular caused us a bunch of headaches because of simple things it just didn’t do. Eventually I’d find someone on the forums saying “oh they’re going to fix that when they rewrite it”. Godot feels better thought out from the ground up so far. Which makes sense - its newer and intentionally avoiding some known pitfalls.

Anyway! I like Godot so far. Like any software I’ve had my frustrations with it, but I’m happy we moved.

God speed,

- Hugh

The LatestT