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.
Three-step path after importing Luna from the Asset Store:
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>/.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).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).
All domain CupkekGames sibling packages, plus the Luna package itself (with its declared deps bundled transitively):
| Required | Where 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.luna | Asset Store |
com.cupkekgames.resources | UPM scoped registry — Wallet + ExperienceTracker live here |
com.cupkekgames.gamesave + com.cupkekgames.gamesave.luna | UPM scoped registry — save manager + AutoSaveView |
com.cupkekgames.newtonsoft | UPM scoped registry — JSON adapter |
com.cupkekgames.rpgstats | UPM scoped registry |
com.cupkekgames.inventory | UPM scoped registry |
com.cupkekgames.addressableassets | UPM scoped registry |
com.cupkekgames.scenemanagement | UPM scoped registry |
com.cupkekgames.sequencer | UPM scoped registry |
com.cupkekgames.settings | UPM scoped registry |
com.cupkekgames.inkbridge | UPM 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.
| Order | Scene | What it does |
|---|---|---|
| 1 | 00_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. |
| 2 | Scenes/01_LunaUIDemoFullMainMenu.unity | Main menu — Continue, New Game, Load, Credits, Settings, Quit. |
| 3 | Scenes/02_LunaUIDemoFullBase.unity | In-game shell — hosts the persistent GameShell prefab. |


The PrefabsUI/GameShell.prefab is the load-bearing piece for the in-game experience. It composes:
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).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 = ... }).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.AutoSaveView (from com.cupkekgames.gamesave.luna) subscribes to GameSaveEvents.AutosaveStart / AutosaveComplete and animates a RadialLoading indicator in the corner.
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 configsGameFull 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.
Everything above — boot flow, menus, modals, loot, save/load, settings — works out of the box. Two things are not yet at their final state:
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.Settings
Theme
Light
Contrast
Material
Dark
Dim
Material Dark
System
Sidebar(Light & Contrast only)
Font Family
DM Sans
Wix
Inclusive Sans
AR One Sans
Direction