unity logo wearing a top hat and monocle

Recent events have a lot of studios thinking about their choice of game engine, and at first glance, options appear to be limited. But things don’t have to be this way.

For most studios, the optimal short term strategy is to wait and see if Unity is forced to back down. Retroactively altering the engine license for shipped games certainly doesn’t sound legal.

While waiting it out may be pragmatic for existing projects, it doesn’t save you from the nightmare of having your entire business beholden to the whims of Unity Technologies™.

You could decide to switch engines for future games. Many people will go to Unreal. I trust Epic more than I trust Unity, in particular because they give everyone source access, but if you’re switching anyway I recommend looking into the free and open source engine Godot which is MIT licensed. Info on console support here.

There is, however, another option. The nuclear option.

You could write your own game engine.

Is writing an engine even viable anymore? Why put in the effort?

Way of Rhea's editor

Other developers are often surprised that I wrote a custom engine for Way of Rhea, but they shouldn’t be. I say this without any smugness: I wrote my own engine in part to avoid the exact sort of nightmare that all Unity users are facing right now.

If it’s doable, why doesn’t anyone do it?

Well, they do:

Making a custom engine is less common than using Unity because it’s more work. It’s not the right choice for everyone. But for a strong programmer, or a team of strong programmers, it’s perfectly viable.

If you write your own engine, you control your own destiny. Nobody can take it away from you. Nobody can retroactively change the pricing model. You can fix your own bugs. Support platforms and features you care about. Etc.

And, if your engine finds a niche, you can help everyone else out by open sourcing it and turning it into its own business, preferably a non-profit.

Don’t start there though. Make it work for you first.

Advice on engine design

int main(int argc, char* argv[]) { if (DoButton("Make Game")) { MakeVideoGame(); } return 0;}

Unity attempts to be an engine for every genre, and every team. Building an engine like this is a massive undertaking. If you decide to build an engine, don’t try to build Unity. Build an engine for you.

If your game is graphically intensive, learn a low level language (Zig, Rust, C, C++.) Learn either a graphics API (OpenGL, Vulkan, DirectX, WebGPU), a wrapper (V-EZ, sokol), or a graphics framework (Ogre, etc.).

If your game is less performance hungry, write the engine in whatever language you’re most comfortable with. Consider frameworks and libraries like MonoGame and RayLib. Leverage middleware, preferably FOSS middleware. You don’t have to write the engine from scratch.

Learn from others. Don’t overengineer, but don’t underinvest in your tools either, your tools are what help you iterate, iteration is what makes your game fun. Employ patterns that have been shown to be productive.

Here are a few generally applicable links:

Here are some resources on lower level stuff I’ve found useful, if you go that route:

I hope this post inspires at least one person to roll their own tech. Let’s escape the nightmare together.