A complete game shell built on Luna + the CupkekGames sibling packages — main menu, in-game shell with persistent top-bar (currency + XP/level chips, AutoSave HUD, action dock), modal views (Inventory, Save/Load, Settings, Pause, Tutorial, Notifications, Speech Bubble, Visual Novel), drop-table-driven loot, RPG stats, Ink dialogue, settings panel with input rebinding.

This is the "what does a real Luna game look like?" demo. Heavier than Showcase — it requires the full CupkekGames sibling-package set installed via the Package Manager window.

Lives at Samples~/GameFull/ in com.cupkekgames.luna.

Quick start

Three-step path after importing Luna from the Asset Store:

  1. Import the Essentials sample alongside GameFull in Window > Package Manager > In Project > LunaUI > Samples. GameFull's UXML references Essentials sample assets (theme, fonts, Panel Settings, prefab LunaUIManager.prefab, UXML primitives, audio) via sibling-relative paths, so both samples must land as siblings under Assets/Samples/LunaUI/<version>/.
  2. Open Tools > CupkekGames > Package Manager. The window auto-opens on first project load if any sibling packages are missing. Click Install GameFull Packages — it adds the CupkekGames UPM scoped registry (https://www.docs.cupkek.games/upm) to your Packages/manifest.json and installs the required CupkekGames sibling packages atomically (one manifest write, one domain reload).
  3. Open 00_LunaUIDemoFullInitialization.unity (at the GameFull sample root, sorts first) and press Play. The Sequencer boots service registrations, then loads the main menu, then the in-game shell.

The Tools > CupkekGames > LunaUI Panel window auto-opens on sample import and provides per-sample setup helpers (scene wiring, Unity dep checks, troubleshooting).

Required packages

All domain CupkekGames sibling packages, plus the Luna package itself (with its declared deps bundled transitively):

RequiredWhere it ships
Luna's bundled deps (data, graphs, services, singletons, pool, fadeables, keyvaluedatabases, prefabloaders, assetfinder, editorui, editorinspector, packagemanager, input)bundled with Luna (declared + transitive deps)
com.cupkekgames.lunaAsset Store
com.cupkekgames.resourcesUPM scoped registry — Wallet + ExperienceTracker live here
com.cupkekgames.gamesave + com.cupkekgames.gamesave.lunaUPM scoped registry — save manager + AutoSaveView
com.cupkekgames.newtonsoftUPM scoped registry — JSON adapter
com.cupkekgames.rpgstatsUPM scoped registry
com.cupkekgames.inventoryUPM scoped registry
com.cupkekgames.addressableassetsUPM scoped registry
com.cupkekgames.scenemanagementUPM scoped registry
com.cupkekgames.sequencerUPM scoped registry
com.cupkekgames.settingsUPM scoped registry
com.cupkekgames.inkbridgeUPM scoped registry

Plus Unity registry packages: com.unity.nuget.newtonsoft-json, com.unity.localization, com.unity.addressables, com.unity.inputsystem. The LunaUI Panel's GameFull section flags any of these that are missing.

Scenes (canonical order)

OrderSceneWhat it does
100_LunaUIDemoFullInitialization.unity (sample root)Boot scene. Runs the Sequencer to register services + load the next scene. Sorts first in the Hierarchy so build settings pick it up.
2Scenes/01_LunaUIDemoFullMainMenu.unityMain menu — Continue, New Game, Load, Credits, Settings, Quit.
3Scenes/02_LunaUIDemoFullBase.unityIn-game shell — hosts the persistent GameShell prefab.

GameFull main menu scene — save-aware Continue/Load buttons over the Luna theme

The in-game shell

GameFull in-game shell — top bar with currency and XP chips, action dock, loot card

The PrefabsUI/GameShell.prefab is the load-bearing piece for the in-game experience. It composes:

  • Top bar (UXML/Shared/GameTopBar.uxml) — chips bound reactively to save data. Gold + Gem chips listen to Wallet.OnChanged; level chip + XP bar listen to ExperienceTracker.OnExperienceChanged / OnLevelUp — both via Scripts/UI/ResourceChipBinder.cs. Updates animate (count-up tween, level-up burst).
  • Action dock — eight icon buttons wired in Scripts/UI/GameShellView.cs: Inventory, SaveLoad, Settings, Pause, Tutorial, VisualNovel, SpeechBubble, Notification. Each button has a matching nav-destination field — a CatalogKey constrained with [CatalogKeyConstraint(NavConstants.NavDestinationCatalogId)] — and a click pushes it through the navigation stack: if (!_inventoryDest.IsEmpty) LunaNavigation.Push(_inventoryDest);. The Notification button additionally pulls the save's notification history at click time and passes it as push args (new NotificationHistoryArgs { History = ... }).
  • Loot card — center area. Clicking evaluates ScriptableObjects/Items/Droptable/DropTable.asset, routes the resulting DropResult list through Scripts/Loot/DropResultRouter.cs (splits by CatalogKey.Catalog into currency / experience / items), applies each via Wallet.Add / ExperienceTracker.AddExp / Inventory.AddItem, fires notifications, and triggers autosave. Implementation in Scripts/Loot/LootCardController.cs.
  • AutoSave HUDAutoSaveView (from com.cupkekgames.gamesave.luna) subscribes to GameSaveEvents.AutosaveStart / AutosaveComplete and animates a RadialLoading indicator in the corner.

GameFull Inventory modal — paginated item grid with category filters, opened from the action dock

Folder layout

GameFull/ ├── README.md ├── CupkekGames.Luna.Demo.Game.Full.asmdef ├── 00_LunaUIDemoFullInitialization.unity ← boot scene (sample root, sorts first) ├── Scenes/ │ ├── 01_LunaUIDemoFullMainMenu.unity │ └── 02_LunaUIDemoFullBase.unity ├── Scripts/ │ ├── GamePrefabs.cs ← scene-lifecycle prefab spawner │ ├── Inventory/ ← LunaInventoryDragDefaults, tooltip helpers │ ├── Loot/ ← DropResultRouter, LootCardController │ ├── SaveSystem/ ← GameFullSaveData (+ SO + Metadata + Manager + SerializationTypesSO) │ ├── UI/ ← Game-specific UI controllers │ │ ├── GameShellView.cs ← action-dock controller for the persistent shell │ │ ├── ResourceChipBinder.cs ← reactive top-bar binding (Wallet + ExperienceTracker) │ │ ├── MainMenuViewExample.cs, PauseMenuViewExample.cs │ │ ├── EquipmentViewPagination.cs, GameSaveViewListExample.cs │ │ ├── SpeechBubbleExample.cs, TutorialModalExample.cs, VisualNovelExample.cs │ │ └── SceneTransition/ ← circle + fade scene-transition presets │ └── UI.Generic/ ← nested asmdef (NotificationView, Pause helpers — UI bridges that don't need GameSave) ├── ScriptableObjects/ │ ├── GameFullSaveDataSO.asset, GameFullSaveManager.asset │ ├── Items/ ← inventory items + categories + droptable + database + data provider │ ├── Resources/ ← Currencies (Gold, Gem catalog) + Experiences (Hero catalog + curves) │ ├── RPGStats/ ← attributes, modifiers, data provider │ ├── SequenceRunner/ ← startup sequences (service registration, scene load) │ ├── Serialization/ ← Newtonsoft JSON service registry + serialization manager registrar + types SO │ └── Settings/SettingsCurrent + SettingsDefault ├── PrefabsUI/ ← GameShell, Pause, Credits, SpeechBubble, TutorialModal, VisualNovel, Inventory, SaveLoad, Settings, Notification, PauseMenuEscapeAction ├── UXML/ │ ├── GameShell.uxml + .uss ← persistent shell layout │ ├── MainGameFull.uxml + Main.uss ← main menu │ ├── SettingsGameFull.uxml + .uss ← settings panel │ ├── Components/ ← ChoicePopup │ └── Shared/ ← GameTopBar.uxml + .uss + GameTokens.uss (design tokens) ├── Fonts/ ← DelaGothicOne SDF (for Japanese localization) ├── Setup/Localization/ ← LunaDemoLocalizationTheme.tss + LunaDemoPanelSettingsLocalization.asset (Japanese rendering) ├── Audio/ ← demo audio └── URP/ ← render-pipeline configs

Save & serialization (end-to-end)

GameFull is the place to see the full save loop driven by Newtonsoft JSON:

  • Scripts/SaveSystem/GameFullSaveData.cs — the save payload. Holds Wallet (currencies) + ExperienceTracker (XP/level tracks) from com.cupkekgames.resources, plus inventory, RPG stats, settings.
  • ScriptableObjects/Serialization/GameFull Serialization Types SO.asset — registers every type that needs polymorphic deserialization (save metadata, save data, all IItemFeature / IUnitFeature implementations).
  • ScriptableObjects/Serialization/GameFull Serialization Manager Registrar.asset — wires the serializer into the Service Locator at startup.
  • ScriptableObjects/Serialization/GameFull Service Registry Newtonsoft.asset — registers the Newtonsoft adapter as the active IDataSerializer.

Autosaves raise GameSaveEvents.AutosaveStart / AutosaveComplete which AutoSaveView listens to for the HUD animation.

Known caveats

Everything above — boot flow, menus, modals, loot, save/load, settings — works out of the box. Two things are not yet at their final state:

  • Localization needs the Showcase sample imported. GameFull carries its own Japanese rendering stack (font under Fonts/, theme + panel settings under Setup/Localization/), but the string tables and Locale assets still ship inside the Showcase sample, under Components/LocalizationDemo/Localization/. MainGameFull.uxml and SettingsGameFull.uxml carry LocalizedString bindings that resolve against that shared UserInterfaceTable, so localization works only when Showcase is imported alongside GameFull — import GameFull alone and the UI falls back to its authored English text. Standalone workaround: rebuild your own string tables following the UI Toolkit Localization guide — the bindings and rendering stack are already in place. The planned move of the locale data into GameFull is still pending.
  • Main Menu + Settings are functional but unpolished. Both screens work end-to-end; the planned UI Effects passes haven't been applied yet — per-button stagger, primary-CTA shine, idle pulse, scene-exit animation on Main Menu; tab-strip drop-in, panel-row stagger, tab-change transition, row click feedback on Settings. Purely cosmetic — nothing blocks using the screens as a starting point today.

See also

Settings

Theme

Light

Contrast

Material

Dark

Dim

Material Dark

System

Sidebar(Light & Contrast only)

Light
Dark

Font Family

DM Sans

Wix

Inclusive Sans

AR One Sans

Direction

LTR
RTL