Engines: Unity / Unreal / Godot
The mechanism: what an engine is and what you are choosing between
In modules 1–4 you assembled the primitives by hand: the game loop, fixed-point, collisions, netcode. An engine is a box where all of that is already done and wired into an editor. What it actually gives you:
- The runtime: the game loop (that one, hidden behind your
Update()), the rendering pipeline, physics, audio, input. - The asset pipeline: importing models/textures/audio, atlases, compression, per-platform formats.
- Scenes and entities: a tree of objects plus components/nodes, level serialization, prefabs.
- The editor: viewport, inspector, profiler, debugger — this is the actual product, not the renderer.
- Builds and deployment: one project → PC, consoles, iOS, Android, web. Porting is the most expensive task an engine takes off your hands.
So "write your own engine" ≠ "write a renderer": a renderer takes weeks, while the editor plus the pipeline plus the platform ports plus years of polish is where the cost is. People write their own for control or extreme performance (id Tech, Decima, RE Engine), but few can afford it.
Three engines — what each one gives you
| Axis | Unity | Unreal | Godot |
|---|---|---|---|
| Language | C# | C++ + Blueprints | GDScript / C# / C++ |
| Model | GameObject + components | Actor + components, a Blueprint VM | a node tree (scene tree) |
| Strong at | mobile, 2D/3D indie, prototypes | AAA 3D, photorealism, film/virtual production | 2D, lightweight projects, control |
| Image | mid-to-high (HDRP) | top (Nanite, Lumen) | growing, 3D still weaker |
| Business model | per-seat subscription (Pro ≈ $2k/yr) | 3.5% royalty above $1M | $0, MIT, fork it |
| Vendor risk | high (Runtime Fee) | medium (Epic holds its terms) | none (the engine is yours) |
A framework for choosing — five axes
You do not choose an engine by "which is best" but by the job, along five parameters: (1) the graphics ceiling — do you need photorealism or 2D pixels; (2) platforms — mobile/console/web; (3) the team — who you have and what they know (C# vs C++ vs nothing); (4) budget and money model (a fixed subscription vs royalties vs zero); (5) control and risk (are you willing to depend on a vendor who can change the terms). The decision is made early and expensive to change — moving between engines means rewriting nearly everything.
A worked example — who pays less
Engine money is counted differently in each case, and the crossover is not obvious. Unreal takes a royalty only on revenue above $1M (after the 2025 reduction the rate is 3.5% for games shipping on the Epic Games Store):
A game grosses $3M. Unreal: 0.035·(3−1)M = $70k (once, and $0 until you pass the million). Unity: the subscription does not depend on revenue — say 5 seats × ≈$2,000/year = ≈$10k/year for the whole of development, whether you sell $0 or $30M. Godot: $0. The takeaway: royalties are good when revenue is modest or you have one big hit (you pay out of success); a subscription is good at large volumes (a fixed cost against enormous revenue) but hurts if the game flops — you pay anyway; open source removes the money axis entirely and puts everything onto "you are your own support".
🕹 Games to play — and what to notice
You can spot the engine from the splash screen, the credits or the SteamDB tag. Play one title per engine and notice the correlation between engine ↔ genre/image — it is not an accident: the tool decides what is easy to do.
The home of indie and mobile. One C# codebase runs on PC, consoles, iOS and Android; the Asset Store covers what the team does not have time to build. Hence the avalanche of 2D/3D indies and mobile hits (Pokémon GO is Unity too).
🎮 Play: launch Hollow Knight or Cuphead and notice the "Made with Unity" splash at startup. Then open the Technology tab on SteamDB for any game — the engine is listed there. Estimate how many games in your library are Unity; it is almost always the indies and the mobile ports.
For when you need the image. Black Myth: Wukong (2024) and Clair Obscur: Expedition 33 (2025) are the showcase for UE5: Nanite carries geometry of millions of polygons with no hand-made LODs, Lumen computes dynamic light with no baked lightmaps. Fortnite is Epic's own flagship.
🎮 Play: load any UE5 game and look for Nanite and Lumen in the settings; toggle Lumen off and on — you will watch dynamic indirect lighting disappear and the scene go flat. Notice the characteristic UE logo on the loading screen.
Lightweight, open source, strong in 2D. Buckshot Roulette (2024) is a solo developer's hit on Godot; Brotato and Dome Keeper are indie successes. The engine is entirely yours: you can fork it and rebuild it to taste, with no royalties or subscription.
🎮 Play: run Buckshot Roulette or Brotato — notice how light they are (instant startup, a tiny download). That is the Godot aesthetic: small, responsive, often 2D. Compare the size of the build with any UE5 game (tens of gigabytes).
Deep end · engineering: what is inside an engine and how the three models differskippable
An "engine" is a bundle of subsystems under one editor. Architecturally, the three answer "how do you describe a game object" differently.
Scenes and objects
- Unity — GameObject + Component. The object itself is empty and behavior is attached through components (
Rigidbody,Collider, yourMonoBehaviour). That is composition over inheritance — a direct relative of ECS (Unity DOTS took the idea to a data-oriented conclusion). - Unreal — Actor + Component, plus Blueprints. C++ for speed, and a visual Blueprint graph compiled into bytecode for its own VM — a designer can code without C++. Heavier, but all the AAA tooling rests on it.
- Godot — a node tree. Everything is a node (a sprite, a camera, a body), and a scene is a subtree instanced like a prefab. Under the nodes sit "servers" (the rendering/physics server) separating the scene from the low level.
How your code runs
Unity: C# through Mono or IL2CPP (transpiled to C++ for speed and for closed platforms). Unreal: native C++ plus the Blueprint VM. Godot: GDScript (interpreted, tailored to the engine) or C#/C++ through GDExtension. The difference is the performance ceiling and who is able to write the code — which decides the makeup of your team.
The editor is the real product
All three have a renderer that is "good enough"; the competition happens in the editor and the pipeline: how fast you iterate, what the profiler is like, whether there is hot reload, how assets import, how alive the marketplace is. That is why your own engine is expensive not because of the renderer but because the editor and the pipeline have to be built and maintained for years.
Deep end · business: three money models, the crossover and supplier riskskippable
Choosing an engine is also choosing a contract. Three fundamentally different models.
Subscription vs royalty vs open source
- Per-seat subscription (Unity): a fixed cost per year regardless of revenue. Predictable; cheap at large volumes; painful on a flop (you pay even if you earned nothing) and it scales with the number of seats, not with success.
- Royalty (Unreal): you pay a share out of success and only above the threshold ($1M). Epic is betting on your hit. Excellent for indies and for a single blockbuster; expensive when revenue is enormous (3.5% of hundreds of millions is a noticeable sum).
- Open source (Godot): $0, but "free" ≠ "no cost": you are your own support, your own plugins, your own missing features. You pay in time and in the risk of immaturity, not in money.
Supplier risk — the Unity 2023 lesson
On 12 September 2023 Unity announced the Runtime Fee: a charge per install of already-released games, retroactively, above certain thresholds. What blew up was not the amount but the precedent: a vendor unilaterally rewriting the terms on work you have already shipped, and on an uncontrollable metric at that (installs could exceed revenue). Over 1000 developers signed an open letter, a boycott started, CEO John Riccitiello left (Oct 2023), and in September 2024 the fee was canceled and the subscription restored (at raised prices). Godot surged on that wave: at GMTK Game Jam 2024 its share went 19%→37% in a year, and by 2025 it was roughly level with Unity.
The engineering conclusion: the price of an engine is not only money but the vendor's right to change the rules. Open source removes that right (fork it and nobody touches your terms again); proprietary keeps it.
ML / AI (your domain): choosing an engine ⇄ choosing a framework and a model provider. A closed API (OpenAI/Anthropic) = Unity/Unreal: fast, powerful, but the vendor can retroactively change the price, the limits, or deprecate a model out from under you — that is exactly the Runtime Fee for an ML team. Open weights you host yourself (Llama, Mistral) = Godot: more expensive in your own hands and infrastructure, but "the engine is yours" — no rug pull, you can fork it and fine-tune it. PyTorch vs JAX vs your own training loop, CUDA vs a bare GPU — the same axis of "abstraction and convenience versus control and ceiling". The main risk lesson from Unity: when you build on someone else's platform, you are building on its future terms, not only today's.
Software / infra: a framework (React/Rails) vs your own; managed cloud (AWS/Vercel) vs self-hosting — vendor lock-in, switching cost, the risk of changed pricing and ToS.
Business: a SaaS subscription vs revenue share vs buying a license — the same "fixed cost versus a share of success" crossover; supplier due diligence = assessing whether they can rewrite the contract out from under you.
The principle: dependency is not today's price but the counterparty's right to change the rules tomorrow. Count not only the cost but the reversibility and who holds the switch.
CharacterBody2D plus a script — you will see the composition of "node + components + behavior". Compare with Unity: the same object is a GameObject with components attached in the inspector. Find the game loop: in Godot it is _process(delta) and _physics_process(delta) — literally the render tick and the physics tick from the first lesson, now spun by the engine for you.Update()/_process(); now you can see who is spinning the loop.If Godot is free and open source, why hasn't everyone left Unity?
Why does Unreal take royalties and Unity a subscription? Which is objectively better?
The Runtime Fee was pennies for most people. Why did it tear the industry apart?
Why use an engine at all — why not write your own, the way Carmack did?
Does the engine really dictate what the game turns out to be?
- Retrospectives on the Unity Runtime Fee (Sept 2023 → canceled Sept 2024) — MobileGamer.biz, GamesIndustry.biz: the saga and the reaction.
- Godot docs + the Godot Foundation — how the node tree and the servers work; growth statistics after 2023.
- Unreal Engine — the official licensing page (3.5% royalty above $1M, per-seat for non-games) plus the Nanite/Lumen docs.
- Jason Gregory, "Game Engine Architecture" — what exactly is assembled inside an engine (runtime, pipeline, tooling).
- GMTK Game Jam — public engine statistics from submissions (a clear shift in shares, 2023–2025).
- Module 5, "Unity & Indie Engine Accessibility" (
05-hd-era-indie-revolution-2005-2012.md).