| Version | Date | Summary | Breaking |
|---|---|---|---|
| 2.0.0 | 2026-07-11 | The UI-focused Luna — shader UI Effects, node-graph navigation, PanelRenderer view layer, UI Attractor, responsive theming, one bundled Asset Store package | ⚠️ from 1.x |
| 1.4.0 | — | UI Render system, Transition Animation system, ProgressBar events | — |
| 1.3.7 | — | Gap line overlays, tooltip disabled state; CelledProgressBar removed | ⚠️ Yes |
| 1.3.6 | — | Radial progress bar arc configuration (sweep / start angle) | — |
| 1.3.5 | — | Celled progress bar, radial multi-segment; UpdateProgressSegments() removed | ⚠️ Yes |
| 1.3.4 | — | Global UIView registry, LocalizationViewStyleSwitcher | — |
| 1.3.3 | — | Text Effects (12 rich-text effects), VertexReveal | — |
| 1.3.2 | — | Button shade/outline styles, ListViewWrapper | — |
| 1.3.1 | — | PaginationController + KeyValueDatabase editor improvements | — |
| 1.3.0 | — | World-space support (Unity 6.2), shader demos (Unity 6.3), RPGDemo | — |
| 1.2.3 | — | GameFull sample, SpeechBubble tails | — |
| 1.2.2 | — | InputPrompt local multiplayer | — |
| 1.2.1 | — | ProgressBar IndicatorAutoColor; fixes | — |
| 1.2.0 | — | Mobile sample, GridView/Inventory list variants, AspectRatio element | ⚠️ Yes |
| 1.1.1 | — | ProgressBar USS variables; Save/Load UI redesign | — |
| 1.1.0 | — | Tooltip system rework, functional save system | ⚠️ Yes |
| 1.0.8 | — | Notification sfx options; fixes | — |
| 1.0.7 | — | CooldownWipe element | — |
| 1.0.6 | — | Custom Tab component | — |
| 1.0.5 | — | PauseMenuEscapeAction plain class, split fade durations | — |
| 1.0.4 | — | CircleHoleElement, Ink sample | — |
| 1.0.3 | — | ProgressBar overlay feature | — |
| 1.0.2 | — | Add Default Escape Action option | — |
| 1.0.1 | — | Disable Other Views On Fade-In option | — |
🚀 The UI-focused Luna. Luna is a pure UI Toolkit framework for Unity 6 — drop it in from the Asset Store, import Essentials, and you have shader-driven UI effects, node-graph navigation, live 3D-in-UI, and a fully themed component library, with every dependency bundled (no scoped registries, no
manifest.jsonedits). Migration is light if you only use Luna for UI.Requires Unity 6000.5+ (the view layer builds on Unity 6.5's
PanelRenderer). Need help? Discord (faster) or email.
VisualElement: Outer (glow / shadow), Outline, Inner shadow, Gradient, Shine, Flash, Pattern (tile), and Dissolve. One uber-shader gated by an _ActiveEffects bitmask — textureless, and zero runtime cost when disabled. See UI Effects.NavNode destinations inside NavGraphSO assets, mounted by a scene NavHost, addressed by validated CatalogKey ids. Id-first verbs on the LunaNavigation facade — Push, PushAsync<T> (awaitable, returns Task<PushResult<T>>), Push<TArgs>, ReplaceTop, PopUpTo, ClearStackAndPush, Close, SwitchChannel, PopBackStack — each with a CatalogKey overload, plus multi-host topology merge, a boot-hold queue, synchronous route guards, and a live Graph Runtime Debugger. See the navigation guide.NavNode dropdown decides what happens beneath the top view: Overlay (default), Replace, or Overlay Opaque — a render optimization where views beneath a fully-covering solid screen stop rendering (display:none) once it settles, then are restored the instant it starts hiding. Covered views stay open with bindings live, so the reveal is instant and data-fresh through any stack depth. Stress demo: Showcase/Components/Occlusion/OcclusionDemo.unity. See Occlusion.LunaUIManager.Instance.Attractor.Burst(...) call: two-stage scatter-then-home motion, pluggable arrival reactions, and per-particle sprite overrides so one burst can carry mixed item icons.ResponsiveViewStyleSwitcher applies a breakpoint USS class to every view root from one call, backed by a semantic size-token system across screens, modals, and banners, with safe-area / UI-scaler support and a responsive GridView. See Responsive.InteractionJuiceManipulator gives any element press / release / hover feel from a reusable profile asset, and components grew UXML-wired juice slots: ProgressBar fill / drain / filled / pulse-below transitions plus an Indicator Mode (damage-ghost drains, clean-tween heals), TabView tab-pop and content-in, CooldownWipe ready-flash and cooling pulse, and Tooltip show / hide TransitionSequenceAssets with a positioning overhaul (measured before the show effect plays — no more mid-animation drift). RestoreOnEnd cleanup makes every effect interrupt-safe. See Interaction Juice.PanelRenderer-based views (Unity 6.5). UIViewComponent drives a PanelRenderer (auto-fetched from the same GameObject when unset). The tree is delivered asynchronously — query elements in OnUILoaded(root) (or gate with WhenUILoaded / the UILoaded event / IsUILoaded), never in Awake / Start.PanelRendererBinder — a lightweight base for components that bind to a PanelRenderer tree without being a full view (HUD binders, tooltip hosts), with OnPanelReady / OnPanelEnable / OnPanelDisable / OnPanelReload hooks. TooltipController extends it. See UIViewComponent → PanelRendererBinder.TabView — one headless tab element. Author plain <ui:Button> children; TabView manages .tab-bar__item / .tab-bar__item--active, fires OnTabChanged(string), and acts per its Mode: Channels (routes to LunaNavigation.SwitchChannel), Panels (display-toggles local .tab-panel siblings), Events (event only), or Auto. Gamepad LB/RB cycling built in.ChoicePopupController, N buttons) and Input Popup (InputPopupController, single-line text with a Validate predicate gating Confirm): register one prefab as a nav destination, push it from anywhere with per-call args, and await the outcome — PushAsync<int> resolves the clicked choice, PushAsync<string> the confirmed text; Esc / backdrop resolve as dismissed.MaxValue once and drive it in absolute units (PlayTo(hp), SnapTo(hp), absolute current/target accessors), with RescaleMaxValue re-proportioning in place for max-HP-increase moments; linear and radial bars share one IProgressBarElement API, so every extension works on both.DelegateGridViewList<T> / DelegateGridViewPagination<T> bind a grid with makeItem / bindItem / unbindItem delegates (UI Toolkit's ListView idiom — no subclass), plus explicit column control via SetFixedItemPerLine.ElementSelector — element queries and transition targets author as a single CSS-selector string parsed by Luna's ElementQuery.Label.PlayCountTo(from, to, durationMs, format) — rolling-number animation for HUD counters, the numeric counterpart of ProgressBar.PlayTo().com.cupkekgames.luna with input, the foundation primitives, and data + graphs (which power catalog-keyed nav) bundled as dependencies. No scoped registry, no chained installs.LunaShowcase flagship shell + LunaStorybook component browser + Components scenes), and GameFull (a finished-looking F2P game shell, including a full inventory / equipment screen and a drop-table loot loop wired to UIAttractor).Tools > CupkekGames > LunaUI Panel (the single-page intro screen: one-click Essentials and Showcase imports, an "Extra: GameFull" card with a live package count, health alerts only when something is broken) auto-opens on first install and on sample import; a Package Manager window installs the optional GameFull ecosystem packages in one click; UI Effect Baker + the Luna Effects window snapshot and profile effect stacks.ItemStatChangeType → ValueDeltaType, ItemStatLine → ValueComparisonLine, ItemStatLineController → ValueComparisonLineController. See Value Comparison.Font.uss for easy revert); KeyValueDatabaseDrawer replaces the per-type KeyValueDatabaseMonoSOEditor subclasses; modal input-blocking uses pickingMode / focusable instead of SetEnabled(false) (no :disabled styling flash while a modal fades).PanelRenderer and custom-filter pipeline. Older editors are blocked at install with a clear version message rather than confusing compile errors.Luna 2.x is a UI-focused re-architecture. If you used Luna only for UI, migration is light; the big-ticket changes:
UIDocument with PanelRenderer on view GameObjects (Unity's API updater won't do it for you), and move element queries from Awake / Start into OnUILoaded(root).NavGraphSO with a NavNode per destination, add a scene NavHost, and remove the old per-view Nav Destination Id wiring — the host mounts the views now. Reference destinations as [CatalogKeyConstraint(NavConstants.NavDestinationCatalogId)] CatalogKey.UIAttractorManager.Instance.X → LunaUIManager.Instance.Attractor.X (delete the manager GameObject); page input-blocking renamed to SetInputBlocked* (the bool meaning is inverted). FadeOutThenDestroy / _addDefaultEscapeAction dismissal → LunaNavigation.PopBackStack().UIViewTransitionEntry targets via an ElementSelector (CSS string) + StepMs — re-author entries that targeted by ElementName, and any ElementSelectors saved in the old structured shape.Assets/Samples/LunaUI and re-import Essentials / Showcase / GameFull; rewrite UXML/USS url() paths that pointed at the old Samples~/Library/... or LunaUI/... sample folders.The wider CupkekGames ecosystem shipped a coordinated v0.2.0 wave alongside Luna 2.0 — foundation split, kind-driven primitives, feature composition, catalog architecture, combat refactor. Only relevant if you use GameFull or pull sibling packages into your project.
Render 3D content (particles, models, VFX) directly onto UI elements using a pooled Camera → RenderTexture pipeline. Supports multiple content modes: prefab instantiation, borrowing scene objects, or observing in-place. Includes PlayOverlay for layering effects on existing UI.
See documentation: UI Render
Reusable UI animations via ScriptableObjects or code. Includes TransitionAnimator component, 52 preset animations, and UIView fade event integration.
IMPORTANT: You need to re-import the library sample to get the presets.
See documentation: Transition Animation
Time.timeScaleOnSegmentAnimationComplete, OnIndicatorAnimationCompletePlayMultiPass() for multiple 0→100% cycles (e.g., XP leveling)See documentation: Progress Bar | Radial Progress Bar
IsFading, IsFadingIn, IsFadingOut state trackingsize-* utility classes. See Size UtilitiesCelledProgressBar component has been removed. Use ProgressBar with gap line overlays instead, which provides equivalent functionality with simpler implementation.disabled state. When disabled, any active tooltips are closed and new ones are prevented from opening. Usage: TooltipController.Tooltip.SetTooltipEnabled(bool)AddTooltipReference(Tooltip) to DragAndDropManipulator. Registered tooltips are automatically disabled when a drag starts and re-enabled when the drag ends.FadeableAction enum and lifecycle action fields (OnAwake, OnEnable, OnDisable, OnDestroy). Each field accepts a FadeableAction value: None, FadeIn, FadeOut, SetFadedIn, or SetFadedOut. For example, set OnAwake to SetFadedOut and OnEnable to FadeIn to have a view start hidden and fade in each time it's enabled.aspect-ratio utility classes (aspect-auto, aspect-square, aspect-video, aspect-1-1, aspect-2-1, aspect-3-2, aspect-4-3, aspect-16-9, etc.).gap-line-count: Number of cells (gap lines = count - 1)minor-cells-per-major: Number of minor cells per major segmentminor-gap-line-width, minor-gap-line-color, minor-gap-line-rangemajor-gap-line-width, major-gap-line-color, major-gap-line-rangeminor-gap-line-min-spacing: Auto-skips minor lines when cells get too narrowSpeechBubblePositionConfig that caused build errors.All progress segments, indicators, and cells scale proportionally within the configured arc.
UpdateProgressSegments(): Simply set Progress[index].TargetValue directly and call PlayProgress().Linear progress bar with discrete cell segments for Overwatch-style health bars. Features cell-based rendering, multi-segment support, angled cells, and damage indicators.
See documentation: Celled Progress Bar
Progress array with CurrentValue, TargetValue, and Color per segmentNew structure: Linear, Radial, Celled, RPG Demo, Architecture
progress attribute from UXMLAddClassToAllUIViews() and RemoveClassFromAllUIViews() to LunaUIManager. Classes are automatically applied to existing and future UIViews.locale-en, locale-ja) to all UIView roots at runtime. Works around Unity's limitation of not being able to change global USS variables at runtime.UIView now implements IDisposable for explicit cleanup.LocalizationViewStyleSwitcher example implemented for Japanese locale only—switching to Japanese changes the font using locale-specific USS classes. You can extend this pattern to other locales as needed."onetime" to OneTime instead of PingPong. Movement effects now animate forward then return to neutral position and stay there. Refactored duplicate code with shared helper methods.https://www.docs.cupkek.games/luna/features/texteffects
Leveraging Unity 6.3's new TextElement.PostProcessTextVertices API to enable rich text animations directly on glyph vertices. This system supports 12 customizable text effects via rich text tags:
All effects support customizable parameters (speed, amplitude, intensity, etc.) through rich text tag attributes.
Visual Novel Controller: Added new VertexReveal text animation mode for smooth character-by-character reveal using vertex manipulation.
TextEffectComponent: New component to easily apply text effects without dialogue controller.
InventoryItemReferenceDrawer.txt, a sample PropertyDrawer for InventoryItemReference. It displays the int ItemType field as a custom ItemType enum dropdown in the Inspector. Provided as a .txt file to avoid conflicts if you add a custom drawer to your project.LunaUIManager.GetInputAction("Move") is now InputDeviceManager.PlayerInputs[0].actions["Move"];InputDeviceManager.PlayerInput.actions["Move"]; is now ``InputDeviceManager.PlayerInputs[0].actions["Move"];`bool IndicatorAutoColor attribute. Useful when you don't want indicator color to update automatically, for example when using SetFilling function to show a change._enableAutosave and _autosaveSlots to protected from private.If you're using GridView or Inventory, refactor is required. See details below.
Custom USS Property
Custom USS Property section in https://www.docs.cupkek.games/luna/components/progressbarCustom USS Property section in https://www.docs.cupkek.games/luna/components/radialprogressbarIf you’d like to see USS variables for other components or properties, let me know!
Samples
Samples
Warning: It's recommended to remove Luna and samples before updating. This update includes significant refactors to the Tooltip, Save/Load and Inventory systems. If you are using these features, you may need to update your implementation. Feel free to ask for support.
Tooltip System
UpdateDisplay function to TooltipManipulator for seamless tooltip updates without closing and reopening.Close function to TooltipManipulator, ensuring only the currently active tooltip is closed.DefaultTooltip has been renamed to TooltipController. Since this is a MonoBehaviour, you’ll need to update your GameObject. Select the GameObject that previously contained DefaultTooltip in your scene, remove the missing component, and add TooltipController manually.DefaultTooltipContainerSetup has been renamed to TooltipContainerSetup.DefaultTooltipManipulator has been renamed to TooltipManipulator.Save/Load System
Other
Library Sample. The inventory system is not strictly a UI component but rather a gameplay feature, making it more appropriate for Library Sample rather than the UI library. It now has it's own assembly file called CupkekGames.InventorySystem.Added:
Added:
Added:
Added:
InputEscapeManager.SetBlocked(true) but it will block all escape actions. With this new class, you can add the pause menu action to the end of the stack so that the pause menu remains accessible while blocking other back actions.New:
New:
New:
New:
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