Logo
Published on

Don't Use Godot For Your Mobile Game

Authors

Most aspiring game developers aren’t software engineers and even if they were, I would bet very few of them would be able to build a mobile game using Godot that has push notifications, ads, and analytics.

Introduction

There are countless reddit threads, youtube videos, and blog posts highlighting the different game engine options but it seems like there are only a few that get all the spotlight: Unreal, Unity, Godot, and GameMaker. My project was a simple 2D arcade game so Unreal seemed like overkill, Unity was going through some controversy around its new pricing model at the time, and GameMaker felt a bit too pedestrian. I read countless posts hyping up Godot, the fact that it was free, and the encouraging stories from people who switched over from Unity and haven’t looked back. I was sold.

Game Engines

Godot was great to start: the node structure was intuitive, it had a lot of built in functionality for map building, UI, and anything else I would need for my game. GDScript was good enough, especially since it was easy to pick-up. After a couple months of developing everything was going great and I was ready to start having people try it. I created the App Store listing for TestFlight, but when I went to export my game to iOS, the cracks started to appear.

Limited Support

My main gripe with Godot is the lack of Support. I’m aware this is kind of hypocritical since it is open source, free, and I have not made any contributions. But as someone just trying to make a game it is super frustrating when the engine you picked and was hyped up, is severely lacking. This is evident by the 12 000 issues currently open on the GitHub page, which makes it feel like if you need help, you’re on your own. One of these issues was opened by me 1 year ago, and still has not even been acknowledged. The bug was that the TouchScreenButton class doesn’t work on the new version of iOS, a seemingly critical feature for a device whose only form of input is a touch screen.

The limited support goes beyond just the ability to get help, the 3rd party support like plugins and integrations are also severely lacking. I wanted to add ads mediation, but gave up after failing to export my project with Applovin MAX. Other common mobile game tools like: Game analytics (not updated for 2+ years), Amplitude, Adjust, and AppsFlyer all have no support.

Shout out to DrMoriarty who made some integrations for these, and seemed to be the only one holding it down for the Godot mobile gaming community but also looks to have moved on.

Native Mobile Features

If you’re trying to implement a feature that requires native support for iOS or Android you better have experience working on those platforms, as well as working with the Godot engine itself. For example, I wanted to implement the Facebook iOS SDK for ad tracking.

Luckily, I’ve developed a few iOS apps using Swift and successfully implemented Apple push notifications on Flutter apps by calling native functions from Dart. Godot launched to iOS is a completely different nightmare. Godot owns the entire life cycle, so your iOS app is just a shell that opens your Godot project and then hands it off. You can see this very clearly when the iOS app displays its launch screen and then Godot shows its launch screen immediately after. There is no flexibility to edit the AppDelegate which is the place where SDK's need to be initialized. You'd need to write a custom plugin for iOS, which requires a lot of expertise.

iOS is a closed system, it has less flexibility since Apple owns everything whereas Android is open source and has tons of libraries. I thought this would make exporting to Android easier but it was equally frustrating. The solution to many of the bugs I faced required constantly upgrading my Godot version, downgrading my JDK version, and upgrading my library versions. It felt like I was guessing every permutation of the versions until I was finally able to magically generate my app bundle.

Learnings for Next Time

Godot has been off my computer for several months and I don't plan on using it anytime soon. I take some responsibility for picking it for my mobile game project without properly researching and falling for the hype. Besides not using Godot I have some other takeaways from this experience.

If you know you are going to need some library or some functionality, make sure there is support for it first. Don’t just google and see that someone put out a plugin, actually go to the plugin, see if it is actively supported, and people are currently able to use it.

Secondly, when you start a project in a new game engine, export it right away to your desired platform to see how the process is. I saw there were mobile games for Godot and there was a button to export to iOS so I assumed all would be fine, but when I actually pressed that export button I learned that was not the case.