A mobile roulette/wheel-of-fortune game built with Unity where players spin the wheel to collect rewards — but must decide when to walk away before losing it all.
Players spin a reward wheel across escalating zones. Each spin offers a chance to win increasingly valuable rewards, but every wheel also contains a bomb slice that wipes out all collected rewards.
- Regular Zones: Spin the wheel with a mix of reward slices and one bomb slice. Rewards improve as zones progress.
- Safe Zones (Every 5th zone): A silver spin with no bomb — guaranteed rewards, no risk.
- Super Zones (Every 30th zone): A golden spin with special high-value rewards and no bomb.
- Collect & Leave: Players can collect all earned rewards and exit when the wheel is not spinning, at safe or super zones.
- Bomb Hit: Lose all accumulated rewards — unless you choose to revive.
- Revive System: After a bomb hit, spend gold to continue from where you left off (bomb-free next spin). Out of gold? Watch an ad to revive for free.
- Tap to Skip: Tapping the wheel during a spin skips the animation and instantly reveals the result.
The core loop is simple: spin for more, or walk away with what you have.
- Configurable wheel slices via Unity Editor (rewards, quantities, visuals per zone)
- Escalating zone system with regular, safe, and super zone types
- Smooth wheel spin animation with LitMotion
- Responsive UI supporting multiple aspect ratios (20:9, 16:9, 4:3)
- TextMeshPro for all text rendering
- Give up / Revive system with gold currency and ad-based fallback
- Clean, SOLID-principled architecture
- Engine: Unity 2021.3.45f2 LTS
- Language: C#
- UI: Unity UI (Canvas - Screen Space) with TextMeshPro
- Animation: LitMotion
- Async: UniTask
- Messaging: MessagePipe
- DI: VContainer
- Architecture: SOLID principles, OOP
See Project Structure for the full directory layout and architecture overview.
| Rule | Detail |
|---|---|
| Canvas Scaler | Scale With Screen Size — Expand |
| Dynamic Elements | Named with _value suffix (e.g., text_reward_count_value) |
| Naming | Root-general to specific: ui_image_spin_silver |
| RaycastTarget | Disabled on non-interactive Image components |
| Animators | Placed on child transforms, not root |
| Anchors & Pivots | Properly set for multi-aspect support |
| Sprites | Sliced mode in Image components |
| Button Binding | Set via OnValidate — no editor-assigned UnityEvents |
| Images | No stretching — use sliced or preserve-aspect |
- Item Database — ScriptableObject-based reward item registry, editor tooling, and DI integration
- Wheel Database — Weighted 8-slice wheel configuration, zone-based generation engine, and editor tools
- Config Management — Centralized editor tool for auto-discovering and managing all ScriptableObject configs
gameplay_demo.mp4
| 20:9 (2400x1080) | 16:9 (1920x1080) | 4:3 (1440x1080) |
|---|---|---|
![]() |
![]() |
![]() |
Download the latest APK from the Releases page.
- Clone the repository
- Open the project with Unity 2021.3.45f2 LTS
- Open
Assets/Roulette/Scenes/SC_MainMenu.unity - Press Play
- Unity Editor (Play Mode)
- Android 15 — Samsung Galaxy A16
This project is for demonstration purposes.


