With my team’s capstone project winding down, I think it’s a good time to look back on the technologies we chose at the start.
Godot
As for any game, the heart of its creation lies in the game engine. In our case, that’s the Godot engine: https://godotengine.org/.
Godot is interesting in the landscape of modern game engines. It definitely feels like an outlier that has yet to establish a solid position in the race. Our team originally chose it due to its open-source nature (as I’ve previously mentioned many times), but I have to say that it feels really nice to work with as a beginner.
My team and I all have little to no prior experience with game development. This was the first time in years that I was going to actually attempt to build a game. While I messed around with Unity awhile ago, it never really appealed to me for various reasons. When getting into Godot, I found that so much of its design resonated with me a lot.
The first thing I absolutely love is how Godot structures games. Godot utilizes a “node hierarchy” system. In simple terms, every single thing in the game is some type of “node” object and has a parent node and child nodes. The only exception is the root node, which obviously doesn’t have a parent.
What makes this system so nice to work with is that everything is traversable and modular.
The game state is essentially a tree that you can walk through to get parent nodes and child nodes, making any changes to them or calling methods on them along the way.
What you would think of as an object in a game is actually just a node with child nodes that give it its properties.
Take a box for example. The structure of it could be something like this:
Rigid Body Node (for physics calculations)
├Mesh Node (for the visual appearance)
└Collider Node (for the collision with other objects)
Each node dictates a different aspect of the box that can then be modified, swapped out, or removed as needed. Want to make it a sphere instead? Just change the mesh and collider. Don’t want it to move? Use a Static Body node instead of a Rigid Body.
Even more interesting, properties are inherited unless overridden. If you need 3 different boxes of different sizes, just duplicate the root node of the box (rigid body in this case) and scale it. The mesh and collider will scale with it.
There’s way too much to go into with the node hierarchy system of Godot, but it is really, really cool to work with. We have been able to accomplish quite a lot of interesting features using it, that I feel we wouldn’t have as easily in something like Unity.
Git
The other major technology in our development journey is Git/GitHub. As is expected for any sane developer, a version control system is a necessity. While I’ve been using Git and GitHub for many years now, this has been my first real experience with handling it on a team.
I have to say, I’ve learned a ton about how to fix merge conflicts. I never could’ve imagined how frustrating it would be to just try to get my code merged into our main branch. Unfortunately, I think my teammates felt the same as well. Every week it was a stress point having to get all of our changes combined. There was always the inevitable conflict that would pop up.
While incredibly annoying during those moments, it’s honestly taught me how to keep version control under control. The big thing to always keep in mind is that everyone needs to be updating their local branch extremely often. The source of those headaches was usually because a recent commit in main wasn’t yet pulled locally. Git is very unhappy if your branch has even 1 commit behind main.
I can say that we’ve been able to get past all of that hardship fighting Git. It truly did come down to inexperience trying to have 4 people stay on the same page with our versions. My hope is that I can take what I’ve learned and apply it to larger teams in the future.
Conclusion
I’m really satisfied with the progress my team has made during the capstone. I worried that I would regret a pick like Godot as the recommended engine for beginners is always Unity. It felt like going out on a limb in a way to trust a less mature tool.
I’m not disappointed in Godot. I actually find that I love a lot about it. You can tell it’s a project driven by passion and not profits. If I continue to pursue game development, I can easily see myself sticking to Godot.
The same can of course be said about Git and GitHub, with the market dominance and amazingness of those tools as well.
Onto the end of the capstone!