Skip to content
cccskills
FreePublished on GitHub

game-engine-choice

Use when a game task could run on more than one engine or the repository has no engine yet - read the repo's engine and pinned version, and only for a brand-new game pick one from platforms, 2D/3D, team language, scale and licensing.

The English summary is being prepared. Showing the original description.

Works withUnity
See how to install

Files included (1)

  • SKILL.md8.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Game Engine Choice

Overview

Choosing an engine is a one-way door: assets, scenes, scripts, editor tooling and the team's skills all bind to it. On an existing project there is nothing to choose — the engine and the exact editor version in the repository are the answer. The choice only opens for a brand-new game (or when the analiz task explicitly decides it), and then it is made from the target platforms first, not from preference.

Core principle: The repository's engine and pinned version win. For a new game, the platform list decides most of the choice before taste gets a vote.

Step 1 — read what the repository already says

SignalEngineVersion lives in
ProjectSettings/ProjectVersion.txtUnitym_EditorVersion: 6000.3.xf1
project.godotGodotconfig/features=PackedStringArray("4.7", ...); a .csproj beside it means Godot .NET
*.uprojectUnreal Engine"EngineAssociation": "5.6" (a GUID means a source build)
package.json with phaser, pixi.js, three, @babylonjs/core, playcanvas, excalibur, kaplayweb enginethe lockfile's resolved version
Cargo.toml with bevyBevyCargo.lock — the minor version is the API
game.projectDefold[project] / bob.jar version in CI
.csproj referencing MonoGame.Framework.*MonoGamethe package version
pygame / pygame-ce in pyproject.toml / requirements.txtpygamethe pin

Found one? Stop here and use it. Never open the project in a different editor version: Unity and Unreal re-serialize assets on open and Godot rewrites project.godot and import files, producing a diff nobody asked for.

Step 2 — only for a new game

digraph e {
  "Repo already has an engine?" [shape=diamond];
  "Use it, at its pinned version" [shape=box];
  "Console or high-end 3D required?" [shape=diamond];
  "Unreal (AAA-style 3D) or Unity" [shape=box];
  "Browser is the main target?" [shape=diamond];
  "Web stack: Phaser / PixiJS (2D), three.js / Babylon.js / PlayCanvas (3D)" [shape=box];
  "Rust team, code-first, accepts churn?" [shape=diamond];
  "Bevy" [shape=box];
  "Godot (2D or mid-scope 3D) or Unity (mobile, broad platform reach)" [shape=box];

  "Repo already has an engine?" -> "Use it, at its pinned version" [label="yes"];
  "Repo already has an engine?" -> "Console or high-end 3D required?" [label="no"];
  "Console or high-end 3D required?" -> "Unreal (AAA-style 3D) or Unity" [label="yes"];
  "Console or high-end 3D required?" -> "Browser is the main target?" [label="no"];
  "Browser is the main target?" -> "Web stack: Phaser / PixiJS (2D), three.js / Babylon.js / PlayCanvas (3D)" [label="yes"];
  "Browser is the main target?" -> "Rust team, code-first, accepts churn?" [label="no"];
  "Rust team, code-first, accepts churn?" -> "Bevy" [label="yes"];
  "Rust team, code-first, accepts churn?" -> "Godot (2D or mid-scope 3D) or Unity (mobile, broad platform reach)" [label="no"];
}

Decision table

NeedStrong fitWatch out for
2D, small-to-mid scope, desktop + mobileGodot (GDScript), Unity, DefoldGodot console ports go through third-party porting partners
2D in the browser, instant loadPhaser (framework), PixiJS (renderer only), KAPLAY / Excalibur (small games), Defold (HTML5 export)PixiJS gives you no scenes, physics, input or audio — you add them
3D in the browserthree.js (largest ecosystem), Babylon.js (batteries included, Havok physics, NullEngine for tests), PlayCanvas (editor-centred)Download size and mobile GPU limits; WebGPU only where the repo opts in
Mobile 3D with broad device reachUnity (URP)Build size; per-platform texture compression
High-fidelity 3D, consoles, large teamsUnreal Engine 5C++ build times, editor weight, no web export
Cross-platform incl. consoles, C# teamUnityConsole SDKs need platform-holder developer accounts
Data-heavy simulation, thousands of entitiesUnity DOTS, Bevy, Unreal MassECS raises the cost of simple gameplay code
Code-first Rust, open sourceBevyA breaking release every few months — pin the minor and budget migrations
C# without an editor, full controlMonoGameYou build tooling (levels, UI) yourself
Teaching, jams, Python teampygame / pygame-cePerformance ceiling; web only through pygbag

Platform reach (verify against the pinned version's docs)

EngineWebMobileDesktopConsole
Unity 6Yes (Web build, heavy first load)YesYesYes, with platform-holder access
Godot 4 GDScriptYes (single-threaded export avoids cross-origin isolation headers)YesYesThrough third-party porting partners
Godot 4 C# (.NET)No — still unsupported in 4.7; choose GDScript for browser targetsYesYesAs above
Unreal Engine 5No official web exportYes (heavier)YesYes, with platform-holder access
Phaser / PixiJS / three.js / Babylon.js / PlayCanvasNativeMobile browsers; wrap with Capacitor if a store build is neededElectron/Tauri wrapperNo
Bevywasm32 (WebGL2 / WebGPU)ExperimentalYesNo official support
DefoldStrong HTML5YesYesSome consoles on request
MonoGameNo first-class webYesYesYes, for registered console developers

Licensing, at a high level

Not legal advice — read the current terms before committing a team to an engine, and name the terms you read in the decision.

  • Unity: subscription seats; a free tier below a revenue threshold. The per-install Runtime Fee was cancelled in 2024.
  • Unreal Engine: free to start; a royalty (5% of gross revenue above a lifetime threshold per title, US$1M at the time of writing) for games.
  • Godot (MIT), Bevy (MIT/Apache-2.0), three.js, Phaser, PixiJS, KAPLAY (MIT), Babylon.js (Apache-2.0), Excalibur (BSD-2), PlayCanvas engine (MIT; its hosted editor is a commercial service): no royalties.
  • MonoGame (Ms-PL), pygame (LGPL — fine when linked dynamically as usual), Defold (free, Defold License).

Language and team

  • C# team → Unity, Godot .NET (no web), MonoGame.
  • C++ team or Blueprint designers → Unreal.
  • Scripting-friendly, small team → Godot GDScript.
  • TypeScript web team → Phaser / PixiJS / three.js / Babylon.js / Excalibur / KAPLAY.
  • Rust team → Bevy.

Record the decision

The closing message (and the README's first lines on a new repository) states: engine, exact version, the two alternatives considered, and the reason the winner won, tied to the task's platforms. Pin the version the same run: ProjectVersion.txt, config/features, EngineAssociation, an exact package.json range plus lockfile, or bevy = "0.N" plus Cargo.lock.

Hard rule

Never introduce a second engine (or a second renderer, physics, input or networking stack) into a project that has one. A web game that "needs a bit of 3D" uses the 3D capability of its own stack or a scoped canvas inside it — it does not gain a parallel engine on your initiative. A genuine engine change is a comment for the architect.

Common Mistakes

  • Choosing by preference when the repository already answered the question.
  • Godot C# for a game whose task lists the browser as a target.
  • Opening a Unity or Unreal project in whatever editor is installed instead of the pinned version.
  • Bevy without an exact minor pin, then breaking on the next cargo update.
  • PixiJS for a game that needs physics, scenes and audio, then rebuilding Phaser by hand.

Red Flags

  • A choice whose only reason is "it's popular" or "I know it best".
  • Two engines' packages in one package.json, or a .uproject beside ProjectSettings/.
  • An engine version bump in a diff for a task that never asked for one.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Use when writing acceptance criteria for a task - express each as an observable Given/When/Then that QA can execute, including negative cases

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when the diff adds or changes an endpoint, resolver, RPC, job or query that takes an object id, a role check, a request binding or a tenant filter - BOLA/IDOR, function-level authorization, mass assignment and tenant scoping

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use on every UI change - semantic HTML, labels for controls, keyboard-navigable dialogs/menus, visible focus, and never color as the only signal

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when a task changes any screen, form, dialog, menu or control - Lighthouse/axe scan of the changed screens, a keyboard walk, and the thresholds that fail a task

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

How to work a task returned with review, QA or UAT findings. Use when a task is in need_revision or PR review comments are in your context.

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

Use when the repository keeps its alerting in code, or a person asks for alerts outside TaskTrooper - PrometheusRule YAML, a Cloud Monitoring alert policy in Terraform, a Datadog monitor, each routed to TaskTrooper's alert ingest URL so it opens an incident here

The English summary is being prepared. Showing the original description.

makifbaysal/tasktrooper117Updated Oct 20, 2026

See all skills by makifbaysal

Report a problem with this skill