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 foundation deps bundled transitively):

RequiredWhere it ships
Foundation primitives (singletons, pool, fadeables, keyvaluedatabases, prefabloaders, assetfinder, editorui, editorinspector, packagemanager, input)bundled with Luna (transitive deps)
com.cupkekgames.lunaAsset Store
com.cupkekgames.servicesUPM scoped registry (Package Manager)
com.cupkekgames.dataUPM scoped registry
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.

The in-game shell

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 that spawn the modal prefabs via UIPrefabLoaderString (Scripts/UI/GameShellView.cs): Inventory, SaveLoad, Settings, Pause, TutorialModal, VisualNovel, SpeechBubble, Notification.
  • 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.

Folder layout

GameFull/ ├── README.md ├── IMPROVEMENT_PLAN.md ← remaining work (effect passes) ├── 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 │ │ ├── NotificationHistoryViewExample.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 │ ├── Sequencer/ ← 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/ ← LocalizationTheme.tss + PanelSettings (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

  • Localization string tables were lost during the 2026-05-13 Localization consolidation. MainGameFull.uxml and SettingsGameFull.uxml still carry LocalizedString bindings to a deleted asset table. The Japanese font and theme survived under Fonts/ + Setup/Localization/; the locale assets + string tables did not. Pending repair.
  • Main Menu + Settings effect passes pending. 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. See Samples~/GameFull/IMPROVEMENT_PLAN.md Parts 1 + 2.

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