> 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/yummy-cats.md).

# Yummy Cats

Yummy Cats for Unity 6 — a complete two-cat catch arcade you can reskin from ScriptableObjects. Shop, achievements, ads and save hooks. Docs by University of Games.

**Yummy Cats** is a complete 2D arcade template. Hold a cat to open its mouth and catch what flies in from the sides. Fish score and build a combo, apples make a cat cry, bombs end the run, and a golden fish feeds the currency that unlocks more cats. Two cats, portrait or landscape, touch, mouse or keyboard.

The project ships as a **playable game**, not a pile of sample scripts. Every cat, projectile, sound, price and difficulty value is a ScriptableObject. A different game is a different set of assets.

{% hint style="info" %}
**Who is this for?** Indie developers shipping a hyper-casual or kids catch game, or anyone who wants a production-shaped Unity arcade — menu, shop, stats, achievements, pause, game over, safe area and monetization hooks — without rebuilding that loop.
{% endhint %}

{% hint style="success" %}
**Requirements:** Unity **6000.5+** · **Input System** package (Active Input Handling = Input System) · uGUI · **no** render-pipeline dependency (sprites and UI only). Documented against package **v3.0.0**.
{% endhint %}

***

## In plain language — what do you get?

1. **A finished loop** — splash, main menu, two-cat run, pause, game over. Both orientations. Touch, mouse and keyboard.
2. **Data, not code, for content** — cats, projectiles, difficulty, audio and achievements are assets under **Create → Yummy Cats**.
3. **A shop** — free cats first, later cats bought with golden fish or an optional store product id.
4. **Lifetime stats and achievements** — games played, best score, best combo, projectiles eaten. Unlock rules are assets.
5. **Monetization seams** — drop an ads or store component on the UI Manager. Without one, the game runs with no ads and purchases that fail cleanly.
6. **Extension events** — `GameEvents` for analytics, quests and VFX. Samples show the wiring.

***

## Quick start

{% stepper %}
{% step %}

### Install

Import the package from the Unity Asset Store into a Unity **6000.5+** project, or open this project as-is. When Unity asks, enable the **Input System**.
{% endstep %}

{% step %}

### Play

Open `Assets/Yummy Cats/Scenes/SplashScreen` and press **Play**. Build settings already include SplashScreen and Game.
{% endstep %}

{% step %}

### Read the one config

Select `Assets/Yummy Cats/Data/GameConfig.asset`. It lists the cats, projectiles, achievements, difficulty profile and audio library. The inspector validates the setup and previews spawn chances.
{% endstep %}

{% step %}

### Change one thing

Duplicate a cat or a projectile, edit the copy, and add it to `GameConfig`. Press Play again. No script change is required for a new character or a new throwable.
{% endstep %}
{% endstepper %}

***

## Features

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><h3>🐱</h3></td><td><strong>Two-cat arcade</strong></td><td>Hold to open a mouth. Fish, apples, bombs and a combo reward. Same reaction time on every screen.</td></tr><tr><td><h3>🎨</h3></td><td><strong>Reskin from assets</strong></td><td>Sprites, clips, prices and spawn weights live on ScriptableObjects. Missing cat states fall back to idle.</td></tr><tr><td><h3>🐟</h3></td><td><strong>Shop &#x26; currency</strong></td><td>Golden fish from combo rewards and rewarded ads. Cats unlock in catalog order.</td></tr><tr><td><h3>🏅</h3></td><td><strong>Stats &#x26; achievements</strong></td><td>Persistent records. Achievements fire when a stat hits a target you set on an asset.</td></tr><tr><td><h3>📱</h3></td><td><strong>Both orientations</strong></td><td>1080×1920 and 1920×1080 designs, safe area, and a capture tool for landscape layouts.</td></tr><tr><td><h3>🧩</h3></td><td><strong>Ads, IAP, saves</strong></td><td><code>IAdsProvider</code>, <code>IStoreProvider</code> and <code>ISaveService</code>. Null defaults so the demo runs with zero SDKs.</td></tr></tbody></table>

***

## Documentation map

| Page                                                                                                             | Contents                                                                  |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| [Getting Started & Recipes](/welcome/products/complete-game-tutorials/yummy-cats/getting-started-and-recipes.md) | Install, first play, then recipes for cats, throws, difficulty and sounds |
| [Your Own Game](/welcome/products/complete-game-tutorials/yummy-cats/your-own-game.md)                           | Reskin and rebalance without forking runtime code                         |
| [Data Model](/welcome/products/complete-game-tutorials/yummy-cats/data-model.md)                                 | `GameConfig`, cats, projectiles, difficulty, audio, achievements          |
| [Core API](/welcome/products/complete-game-tutorials/yummy-cats/core-api.md)                                     | Session, wallet, shop, stats, saves, `GameEvents`                         |
| [Gameplay API](/welcome/products/complete-game-tutorials/yummy-cats/gameplay-api.md)                             | Cats, spawner, arcs, projectile effects                                   |
| [UI, Layout & Input](/welcome/products/complete-game-tutorials/yummy-cats/ui-layout-and-input.md)                | Screens, orientation, safe area, keyboard                                 |
| [Ads, IAP & Extending](/welcome/products/complete-game-tutorials/yummy-cats/ads-iap-and-extending.md)            | Providers, samples, a project roadmap                                     |
| [FAQ](/welcome/products/complete-game-tutorials/yummy-cats/faq.md)                                               | Tuning, input, saves, orientation                                         |

***

## What ships in the box

The default `GameConfig` is a complete game you can play before you change anything.

| Content      | Shipped setup                                                                                                                                                     |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cats         | **Whiskers** and **Mittens** free. **Shadow** (20) and **Ginger** (30) bought with golden fish.                                                                   |
| Throws       | **Fish** (score, combo, miss ends the run), **apple** (cry, combo break), **bomb** (burn, run ends), **golden fish** (combo reward only, +1 currency, 50 points). |
| Difficulty   | Flight time **1.1 s**, bursts of 2–4, late game every **0.15 s** after 200 throws. Golden fish between combo **40** and **59**.                                   |
| Achievements | First Bite, Combo Master (30), Regular (50 runs), Fish Connoisseur (500 fish), Gold Rush (25 golden fish).                                                        |
| Ads          | Rewarded ad pays **1** golden fish. Interstitial every **3** finished runs.                                                                                       |

***

## Architecture

```mermaid
flowchart LR
    Config["GameConfig"] --> Services["GameServices"]
    UI["UIManager"] --> Services
    UI --> Logic["InGameLogic"]
    Logic --> Spawner["Spawner"]
    Spawner --> Arc["ProjectileArc"]
    Services --> Session["GameSession"]
    Services --> Shop["CatShop + Wallet"]
    Services --> Stats["PlayerStats"]
    Stats --> Achievements["AchievementService"]
    Logic --> Events["GameEvents"]
    Events --> Tracker["ProgressTracker"]
    Tracker --> Stats
```

### Design principles

1. **One config asset** — `GameConfig` is the entry point. Duplicate it to prototype another game and assign the copy on `UIManager`.
2. **Plain C# for rules** — score, wallet, shop, stats and achievements do not touch `MonoBehaviour`. Scene scripts call `UIManager.Services`.
3. **Effects are data** — `ProjectileEffect` decides score, currency, stun or game over. A new throwable does not need a new class.
4. **Events at the edges** — `GameEvents` plus C# events on the wallet, session and achievements. Do not edit runtime scripts to add analytics.
5. **Adapters for SDKs** — ads, IAP and saves are interfaces. The template runs with null ads, a store that declines, and PlayerPrefs.

### Assemblies

| Assembly            | Folder            | Role                                                   |
| ------------------- | ----------------- | ------------------------------------------------------ |
| `YummyCats.Runtime` | `Scripts/Runtime` | Gameplay, data, services, UI                           |
| `YummyCats.Editor`  | `Scripts/Editor`  | Config inspector, layout tools, **Tools → Yummy Cats** |
| `YummyCats.Tests`   | `Scripts/Tests`   | Edit-mode tests plus a Play Mode smoke test            |
| `YummyCats.Samples` | `Scripts/Samples` | Debug ads, debug store, event logger                   |

`YummyCats.Runtime` is `autoReferenced`. Root namespace is `YummyCats`.

### Namespaces

| Namespace                | Contents                                                                              |
| ------------------------ | ------------------------------------------------------------------------------------- |
| `YummyCats`              | Session, events, preferences, wallet, shop, stats, `SoundId`, `GameState`, `CatState` |
| `YummyCats.Data`         | `GameConfig`, definitions, `AudioLibrary`, `DifficultyProfile`                        |
| `YummyCats.Achievements` | `AchievementDefinition`, `AchievementService`                                         |
| `YummyCats.Persistence`  | `ISaveService`, PlayerPrefs, JSON file, `SaveKeys`                                    |
| `YummyCats.Services`     | `GameServices`, ads, store, interstitial scheduler                                    |
| `YummyCats.Gameplay`     | Cats, spawner, projectiles, screen fit                                                |
| `YummyCats.UI`           | Screens, audio, keyboard, safe area, orientation layouts                              |
| `YummyCats.Samples`      | Drop-in debug integrations                                                            |

***

## Package layout

```
Assets/Yummy Cats/
├── Animations/
├── Audio/              Music/ loops and SFX/ one-shots
├── Data/               GameConfig plus Cats, Projectiles, Achievements, Difficulty, Audio
├── Documentation/      In-editor manual (Tools → Yummy Cats → Open Documentation)
├── PhysicsMaterials/
├── Prefabs/            Fish, GoldenFish, Bomb, Apple
├── Scenes/             SplashScreen (entry) and Game
├── Scripts/            Runtime, Editor, Tests, Samples
└── Sprites/            Backgrounds, Cats, Fish, Items, UI
```

***

## Default controls

| Action             | Default                       | Where                                                            |
| ------------------ | ----------------------------- | ---------------------------------------------------------------- |
| Open the left cat  | Hold **A** or **Left Arrow**  | During a run                                                     |
| Open the right cat | Hold **D** or **Right Arrow** | During a run                                                     |
| Pause              | **Esc** or **P**              | During a run                                                     |
| Resume             | **Esc** or **Enter**          | Pause overlay                                                    |
| Play / play again  | **Enter** or **Space**        | Menu, game over                                                  |
| Back               | **Esc**                       | Close popups; leave game over for the menu                       |
| Move focus         | Arrows or **Tab**             | Selects the screen's default button, then EventSystem navigation |

Touch and mouse use the Event Triggers on the cat buttons. Keys are editable on the **Keyboard Controls** component. Details: [UI, Layout & Input](/welcome/products/complete-game-tutorials/yummy-cats/ui-layout-and-input.md).

***

## Editor tools

| Menu                                                           | What it does                                                                 |
| -------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| **Tools → Yummy Cats → Open Documentation**                    | Opens the in-project manual                                                  |
| **Tools → Yummy Cats → Validate Game Configs**                 | Checks every `GameConfig` and logs errors in the Console                     |
| **Tools → Yummy Cats → Layout → Preview Portrait / Landscape** | Applies the captured layout so you can edit that orientation                 |
| **Tools → Yummy Cats → Delete Save Data**                      | Clears PlayerPrefs written by this package (asks first)                      |
| **Create → Yummy Cats → …**                                    | Game Config, Cat, Projectile, Difficulty Profile, Audio Library, Achievement |

***

## Support

Questions about the package? Reach us via the [Unity Asset Store publisher page](https://assetstore.unity.com/publishers/25633) or [universityofgames.net](https://www.universityofgames.net).
