> For the complete documentation index, see [llms.txt](https://university-of-games.gitbook.io/welcome/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://university-of-games.gitbook.io/welcome/products/complete-game-tutorials/bloom-boom.md).

# Bloom Boom

Bloom Boom (Endless Catch Game) for Unity 6 — endless color-match catch arcade with swipe baskets, difficulty ramp, power-ups and a layered API. Docs by University of Games.

![Bloom Boom](https://assetstorev1-prd-cdn.unity3d.com/key-image/67ca91a7-ae11-4525-905f-917130554605.jpg)

**Bloom Boom** is a complete Unity game tutorial and finished endless catch arcade — not a code snippet. Flowers fall from the sky; the player swipes a belt of baskets and catches each flower in the matching color. Wrong catches shrink the baskets and end the run after too many mistakes. The longer you survive, the harder it gets.

On the Unity Asset Store the listing is titled **Endless Catch Game — Complete Game Tutorial**. The package folder, assemblies and this documentation use the product name **Bloom Boom**.

{% hint style="info" %}
**Who is this for?** Indie developers shipping a hyper-casual / mobile score-chaser, teams learning event-driven Unity architecture with ScriptableObject tuning, or anyone who wants a production-ready color-match catcher to reskin and extend.
{% endhint %}

{% hint style="success" %}
**Requirements:** Unity **6** (tested on `6000.5.4f1`) · **uGUI** only · no third-party packages · Built-in / URP / HDRP (sprites + uGUI, `Sprites/Default`) · portrait **and** landscape with live re-layout
{% endhint %}

{% hint style="info" %}
**Unity Asset Store:** [Endless Catch Game — Complete Game Tutorial](https://assetstore.unity.com/packages/templates/tutorials/endless-catch-game-complete-game-tutorial-218023) · Publisher: [University of Games](https://assetstore.unity.com/publishers/25633) · Package version **2.0.0**
{% endhint %}

***

## In plain language — what do you get?

A namespaced runtime assembly (`BloomBoom.Runtime`) with a layered core that never talks to UI, plus a full playable scene:

1. **Endless color-match loop** — swipe the basket belt, catch matching flowers, survive shrinking baskets.
2. **Data-driven difficulty** — spawn rate and fall speed ramp over the run from an authorable `DifficultyProfile`.
3. **Three power-ups** — Double Points, Slow Motion, Basket Repair — ScriptableObject effects you can clone or replace without scene work.
4. **Responsive playfield** — portrait and landscape; rotating the device mid-run keeps swipe offset, basket damage and flowers in flight.
5. **Full screen flow** — main menu, HUD, pause (Escape / Android back), settings, game over, local best-run board, Twitter/Facebook share.
6. **Clean architecture** — asmdefs, XML docs, `Services` registry (Enter Play Mode Options / no mutable statics), EditMode tests and editor tools under **Tools → Bloom Boom**.

***

## Quick start

{% stepper %}
{% step %}

### Import

Everything lives under `Assets/BloomBoom/`.
{% endstep %}

{% step %}

### Open the demo

Open `Assets/BloomBoom/Scenes/Game.unity` and press **Play**. Swipe (or drag with the mouse) to move the baskets.
{% endstep %}

{% step %}

### Build

Switch platform as usual for Android / iOS / standalone. Player Settings default to auto-rotation. No extra packages or shader upgrades.
{% endstep %}

{% step %}

### Customize

Tune `Resources/BloomBoom/GameConfig`, swap sprites, or add a color / power-up using the recipes. Details on [Getting Started & Recipes](/welcome/products/complete-game-tutorials/bloom-boom/getting-started-and-recipes.md).
{% endstep %}
{% endstepper %}

Full walkthroughs: [Getting Started & Recipes](/welcome/products/complete-game-tutorials/bloom-boom/getting-started-and-recipes.md).

***

## Features

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><h3>🌸</h3></td><td><strong>Color-match arcade</strong></td><td>Falling flowers, swipeable basket belt, combo scoring and a shrinking-basket fail state.</td></tr><tr><td><h3>📈</h3></td><td><strong>Difficulty ramp</strong></td><td>Spawn interval and fall speed lerp from an authorable profile — no code to retune pacing.</td></tr><tr><td><h3>⚡</h3></td><td><strong>Power-ups</strong></td><td>Double Points, Slow Motion and Basket Repair; add your own with a <code>PowerUpEffect</code> subclass.</td></tr><tr><td><h3>📱</h3></td><td><strong>Portrait + landscape</strong></td><td>Playfield and belt re-lay out live on rotation; swipe stays 1:1 in world space.</td></tr><tr><td><h3>🧩</h3></td><td><strong>Layered API</strong></td><td>Core never references UI. Screens listen to C# events. Persistence is a PlayerPrefs facade.</td></tr><tr><td><h3>🛠️</h3></td><td><strong>Editor + tests</strong></td><td>Scene validator, default-config generator, EditMode tests for score, spawn, belt, swipe and layout.</td></tr></tbody></table>

***

## Documentation map

| Page                                                                                                                  | Contents                                                               |
| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| [Getting Started & Recipes](/welcome/products/complete-game-tutorials/bloom-boom/getting-started-and-recipes.md)      | Demo scene, hierarchy, bindings, difficulty / swipe / power-up recipes |
| [Your Own Assets](/welcome/products/complete-game-tutorials/bloom-boom/your-own-assets.md)                            | Replace flowers, baskets, backgrounds, UI and audio                    |
| [Core API](/welcome/products/complete-game-tutorials/bloom-boom/core-api.md)                                          | `GameManager`, score, spawning, playfield, config, `Services`          |
| [Gameplay, Power-Ups & UI API](/welcome/products/complete-game-tutorials/bloom-boom/gameplay-power-ups-and-ui-api.md) | Flowers, baskets, swipe, power-ups, screens, save keys                 |
| [Extending & Troubleshooting](/welcome/products/complete-game-tutorials/bloom-boom/extending-and-troubleshooting.md)  | Custom colors and effects, pause, tests, FAQ                           |

***

## Architecture

```mermaid
flowchart LR
    Input[SwipeSystem] --> Belt[BasketBelt]
    Belt --> Baskets[Basket]
    Spawn[FlowerSpawner] --> Field[FlowerField]
    Field --> Flower[Flower]
    Flower --> Receiver[IFlowerReceiver]
    Receiver --> GM[GameManager]
    GM --> Score[ScoreKeeper]
    GM --> Layout[PlayfieldLayout]
    Power[PowerUpManager] --> Effects[PowerUpEffect]
    UI[UI screens] --> GM
    GM --> Persist[PlayerProgress]
```

### Design principles

1. **Core never touches UI** — `GameManager` raises `StateChanged`, `GameEnded`, `FlowerCaught`, `FlowerMissed`, `LayoutChanged`. Screens subscribe.
2. **Plain C# where it matters** — `ScoreKeeper`, `FlowerSpawner`, `FlowerField`, `BasketBelt`, `SwipeMotion`, `PlayfieldLayout` and `DifficultyRamp` are unit-tested without MonoBehaviours.
3. **Data-driven pacing & pickups** — `GameConfig`, `DifficultyProfile` and `PowerUpSettings` ScriptableObjects; missing assets fall back to built-in defaults.
4. **One registry** — every singleton lives in `Services`, cleared on Play mode start. No mutable static fields.
5. **Match by tag** — `FlowerColor` member names must equal basket tags (`Red`, `Green`, `Blue`).

### Assemblies

| Property       | Value                                        |
| -------------- | -------------------------------------------- |
| Runtime        | `BloomBoom.Runtime` (`autoReferenced: true`) |
| Editor         | `BloomBoom.Editor`                           |
| Tests          | `BloomBoom.Tests` (Editor, NUnit)            |
| Root namespace | `BloomBoom`                                  |
| References     | Unity uGUI only                              |

### Namespaces

| Namespace               | Contents                                             |
| ----------------------- | ---------------------------------------------------- |
| `BloomBoom.Core`        | Session, score, spawn, playfield, config, `Services` |
| `BloomBoom.Gameplay`    | Flower, basket, belt, swipe, color, camera shake     |
| `BloomBoom.PowerUps`    | Manager, definitions, effects                        |
| `BloomBoom.UI`          | Screens, HUD, sharing                                |
| `BloomBoom.Audio`       | Persistent music, one-shot SFX                       |
| `BloomBoom.Persistence` | PlayerPrefs facade and run history                   |
| `BloomBoom.EditorTools` | Validator, config factory, reserialize               |

***

## Package layout

```
Assets/BloomBoom/
├── Animations/          Clips and animator controllers
├── Audio/               Sound effects
├── Documentation/       README, Manual.md, CHANGELOG
├── Prefabs/             Flowers, one-shot sounds, GameManager
├── Resources/BloomBoom/ GameConfig, difficulty, power-up assets
├── Scenes/              Game.unity
├── Scripts/
│   ├── Runtime/         BloomBoom.Runtime
│   ├── Editor/          BloomBoom.Editor
│   └── Tests/           BloomBoom.Tests
└── Sprites/             Backgrounds, baskets, flowers, UI
```

***

## Default controls

| Action       | Input                                                              |
| ------------ | ------------------------------------------------------------------ |
| Move baskets | Touch or mouse drag anywhere that is not an interactive UI control |
| Fling        | Release while dragging — exponential deceleration                  |
| Pause        | Escape / Android back (`GameManager.TogglePause`)                  |

Swipe uses unscaled time: Slow Motion slows the flowers, never the player's hand.

***

## Tags & scene contract

Matching is done with **tags**, not layers. Member names on `FlowerColor` must match tags exactly.

| Tag / object             | Role                                                                |
| ------------------------ | ------------------------------------------------------------------- |
| `Red` / `Green` / `Blue` | Basket color groups; flower `Color` uses the same names             |
| `Baskets`                | Parent of the cloned belt (`SceneObjectNames.BasketsParent`)        |
| `AudioSource`            | Persistent music object                                             |
| `Destroyer`              | Trigger below the playfield; widened to the current playfield width |

Run **Tools → Bloom Boom → Validate Scene Setup** after structural changes.

***

## Version history

{% updates format="short" %}
{% update date="2026-09-21" tags="major" %}

## 2.0.0 — Architecture rebuild

Portrait and landscape with live re-layout, 1:1 world-space swipe (`SwipeMotion`), `BasketBelt` / `PlayfieldLayout` / `FlowerField`, ScriptableObject difficulty and power-ups, object pooling, pause, local run history, `Services` registry (Enter Play Mode Options, no mutable statics), editor tools and EditMode tests. SRP-ready (`Sprites/Default` + uGUI).
{% endupdate %}

{% update date="2024-12-31" tags="minor" %}

## 1.0.0 — Initial release

Endless color-match catcher with swipe baskets, combo scoring and a shrinking-basket fail state.
{% endupdate %}
{% endupdates %}

***

## Related products

* [Catch the Fish](/welcome/products/complete-game-tutorials/catch-the-fish.md) — related catch arcade tutorial
* [Cannon Crunch](/welcome/products/complete-game-tutorials/cannon-crunch.md) — one-touch arcade with shop and progression
* [Complete Game Tutorials](/welcome/products/complete-game-tutorials.md) — more ready-made Unity projects from University of Games

***

## Support

Questions about the package? Reach us via the [Unity Asset Store publisher page](https://assetstore.unity.com/publishers/25633) or the channels listed under [Community](/welcome/community.md).
