Playable ads
A playable ad is a few seconds of real gameplay that ends with an invitation to install. It runs inside another app, from a single file or a small ZIP, under each ad network's rules.
The shape that works
Almost every successful playable follows the same arc:
- Hook (0–3 s) — something moving, and a clear prompt: a hand pointing at what to tap.
- Gameplay (5–30 s) — one mechanic, easy to win, with juicy feedback on every action.
- Win or fail — a short celebration (or a near-miss that makes them want another go).
- End card — the game's logo, a big install button, nothing else to do.
Keep the first tap obvious, make it hard to lose, and get to the end card before attention runs out. The Tap to Win template is the arc in its smallest form.
The install button
Call Game.ads.OpenStore() from the install button. The build wires it to each network's own install call, with the store link from the build profile:
ts
import { Game, Script, script } from "mmpx";
@script('InstallButton')
export class InstallButton extends Script
{
public OnClick() : void
{
Game.ads.OpenStore();
}
}Tell the network when the player wins and when the playable is done — some networks require it:
ts
import { Entity, Game, Script, UITransitionComponent, property, script } from "mmpx";
@script('Finish')
export class Finish extends Script
{
@property(Entity) endCard : Entity | null = null;
public Win() : void
{
this.endCard?.TryGetComponent(UITransitionComponent)?.Show();
Game.ads.GameComplete();
Game.ads.Finished();
}
}You can skip the script too: a UIActions component on the button can open the store on click, set up entirely in the Inspector.
While the network pauses the ad or it isn't on screen, the engine holds the game and mutes its sound for you.
Build profiles
A playable build profile (File → Build…) holds everything one build needs:
- Networks — tick the networks to build for, or All networks. Each gets its own package. See the network reference for each one's format and rules.
- App Store / Google Play URLs — where the install button sends players.
- Scenes in Build — the scenes the playable carries, and which one starts.
- Splash screen, sprite atlases, engine features — see Size and loading.
Play and Play in Browser run as the active profile, so what you test is what ships. A script can read which build it is in with Game.build.network and Game.build.profile.
Before you upload
The Build window's checks flag common causes of rejection before you build: nothing that opens the store, no store links, network requests in a script, a feature in use that's cropped out, a scene a script loads that isn't in the build. The size report shows each package against its network's cap. Fix those first. Then:
- Test on a phone: playables are almost always portrait and touch-first.
- Keep sound off until the first tap — browsers block it before then, and several networks require it.
- Never put a fake close button or a misleading prompt in the ad; the networks reject it.
Variants
To test different art, text or difficulty, make variants of one project instead of copies: Assets → Create → Project Variant. A variant swaps assets, texts and field values; tick it on the build profile and each variant builds its own packages. Fix a bug once and every variant has it. Scripts can read Game.build.variant and Game.build.params.