Mobile Match-3 prototype built in Unity 6 for live mobile F2P client engineering: async board commands, VContainer service boundaries, Addressables content, Firebase analytics and cloud save, and LevelPlay ad mediation.
- Match-3 core loop with power tiles, level objectives, and win/lose flow
- Async command-queued board resolution (swap, destroy, gravity, power tiles)
- Deadlock detection with shuffle-until-playable
- Level select and light meta progression (coins, unlocked levels)
- Coin economy: earn on win, spend to continue after fail
- VContainer scopes for bootstrap, menu, and gameplay lifetimes
- Addressables level loading and pooled VFX
- Firebase Analytics with a local offline event queue
- Encrypted local save plus Firestore cloud sync
- Unity LevelPlay banner and interstitial mediation
- Edit Mode tests for potential moves and shuffle
- Android CI build via GitHub Actions
BootstrapLifetimeScope (DontDestroyOnLoad)
Save / Analytics / Ads / Audio / Input / Firebase bootstrap
|
v
Loader -> MainMenu (MenuLifetimeScope)
|
v
Loader (optional interstitial gate) -> PlayScene (GameLifetimeScope)
Board mutations serialize through CommandInvoker and ICommand implementations. Live-service hooks enter at bootstrap (analytics/session), level events (start/complete/fail), and Loader transitions (interstitials).
Details: docs/architecture.md
| Area | Choice |
|---|---|
| Engine | Unity 6000.3.14f1 (URP 2D) |
| DI | VContainer |
| Async | UniTask |
| Content | Addressables (levels, VFX) |
| Auth / cloud save | Firebase Anonymous Auth + Firestore |
| Ads | Unity LevelPlay (IronSource mediation) |
| Analytics | Firebase Analytics (offline queue) |
Original first-party code and docs: MIT.
Third-party packages and Asset Store plugins keep their own licenses — see docs/third-party.md.

