<aside>
<img src="/icons/reorder_gray.svg" alt="/icons/reorder_gray.svg" width="40px" />
Navigation
</aside>
🏠 Home Page
Overview
Level Editor
Items
Power-Ups
Tutorials
Map
UI Store
💰 Monetization (Ads & IAP)
❤️ Lives System
Tutorial System Overview
The tutorial system manages one-shot guided sequences that run once per save slot. Each tutorial tracks its own completion state via SaveController and activates only if not yet finished.
- TutorialController — main MonoBehaviour that holds all tutorials and exposes a static API for triggering them. Automatically collects
BaseTutorial components from the scene on save.
- BaseTutorial — abstract base class all tutorials inherit from. Handles init, start, finish lifecycle, and save state via
TutorialBaseSave.
- TutorialCanvasController — overlay canvas with an animated pointer and fade effect. Used to highlight world objects and UI elements during a tutorial.
- TutorialHelper — editor utility that adds a menu item to skip all tutorials during development.

How to add a new tutorial
- Create a new C# script inheriting from
BaseTutorial.
using UnityEngine;
namespace Watermelon
{
public class MyTutorial : BaseTutorial
{
protected override void OnInitialised() { }
protected override void OnStarted()
{
// start tutorial logic — show pointer, disable input, etc.
}
protected override void OnFinished()
{
// cleanup — called automatically after FinishTutorial()
}
}
}
- Add the script to the scene. Attach it as a child GameObject of the TutorialController object in the Game scene. Save the scene — TutorialController discovers all
BaseTutorial children automatically via OnSceneSaving.
- Trigger the tutorial from game code. Call
TutorialController.ActivateTutorial<T>() at the appropriate moment (level start, after a specific game event, etc.).
// Activates tutorial; skips silently if already finished in a previous session
TutorialController.ActivateTutorial<MyTutorial>();
Tutorials in this project
Five tutorials are implemented in Triple Pick. Each runs exactly once and is persisted per device via SaveController. All tutorial objects are located in the Game scene under Tutorials/Tutorial Name.
- FirstLevelTutorial — runs on level index 0. Shows an animated click pointer on each item in order of ID. Guides the player to tap all hinted items in sequence. Finishes when all items have been picked.
- PUHammerTutorial — triggers when the player reaches the Hammer power-up’s required level. Waits for the first item to be added to the dock, then highlights the Hammer button and shows: “Use this booster to undo your last move.” Finishes when the player activates the Hammer.
- PUMagnetTutorial — triggers at the Magnet power-up’s required level. Immediately highlights the Magnet button and shows: “Use this booster to collect 3 matching items.” Finishes when the player activates the Magnet.
- PUShuffleTutorial — triggers at the Shuffle power-up’s required level. Highlights the Shuffle button and shows: “Use this booster to shuffle items on the field.” Finishes when the player activates Shuffle.
- PUExtraTimeTutorial — triggers at the FreezeTimer power-up’s required level. Highlights the FreezeTimer button and shows: “Use this booster to freeze the timer.” Finishes when the player activates FreezeTimer.
All power-up tutorials share the same pattern: disable input via RaycastController.Disable(), move the power-up panel into the tutorial overlay canvas, show a message box, then restore input and finish when the player uses the power-up.
Skipping tutorials in Editor
Open Actions → Skip Tutorial in the Unity menu bar to toggle the skip flag. When active, all tutorials finish immediately on activation without showing any UI. The setting is stored in EditorPrefs and persists across Play sessions. Toggling mid-play takes effect immediately.