UI Toolkit: Tween Engine View on Asset Store (opens in new tab)

Package details

Latest version
1.0.2
Last updated
First released
Unity version
6000.3.10 or later
Package size
130 KB
Files
98
Favorites
1
Views in the past week
18

Price tracking

Last checked
Tracked since
Lowest recorded
$10.00 on

Keywords

UI Toolkit: Tween Engine

by KrookedLilly (opens in new tab)

No ratings yet

Animate Unity 6 UI Toolkit from C# or from USS — your call. One-liner tweens, declarative `@keyframes`, 32 easing curves, sequences, presets, auto-cleanup. One runtime drives both paths.

Price $20.00

Buy on Asset Store (opens in new tab)

Affiliate link · Purchases support this site

Price history

Last 6 months

USD
Price history for UI Toolkit: Tween Engine, 6 months Current $20.00; lowest $10.00; highest $20.00 in this period. $0 $10 $20 Jul Aug Sep Oct Nov Version 1.0.1 released 5 Jun 2026 v1.0.1 Version 1.0.2 released 10 Jun 2026

Asset preview

1 / 3

UI Toolkit: Tween Engine screenshot 1

UI Toolkit: Tween Engine screenshot 1

About this asset

Unity 6 UI Toolkit has no built-in tween engine and no @keyframes support. You write element.schedule.Execute(...) loops, hand-roll easing math, manage cleanup yourself, and watch tweens leak when an element gets removed mid-animation. Designers can't author motion without writing C#.

This asset is the missing animation layer. Animate any UI Toolkit property from a single line of C# — button.TweenScale(1.2f, 0.25f).SetEasing(EaseType.EaseOutBack). Or write declarative @keyframes in USS and watch elements auto-animate the moment a class is applied. Same engine drives both paths, so a curve you pick in C# behaves identically to the same curve named in USS.

One-line tweens.

element.TweenOpacity(1f, 0.3f).SetEasing(EaseType.EaseOutCubic);
button.TweenScale(1.2f, 0.25f).SetEasing(EaseType.EaseOutBack);
card.TweenTranslate(0f, -20f, 0.4f).SetDelay(0.1f);
await element.FadeIn(0.3f).ToAwaitable();

Every property tween returns a TweenHandle for chaining (SetDelay, SetLoops, From, SetRelative, OnComplete, OnKill), control (Play, Pause, Kill, Complete, Restart), and async (ToAwaitable). 30+ animatable properties cover the full UI Toolkit style surface: transforms, sizes, positions, spacing, borders, colors, text, layout.

Declarative @keyframes in USS.

@keyframes pulse {
0% { scale: 1.0 1.0; }
50% { scale: 1.05 1.05; }
100% { scale: 1.0 1.0; }
}
.heartbeat-card {
animation: pulse 1s ease-in-out infinite;
}

Full CSS @keyframes syntax — duration, delay, iteration count (including infinite), direction (normal, reverse, alternate, alternate-reverse), fill-mode (forwards, backwards, both), play-state, plus the animation shorthand. Add a class to an element, the animation starts. Remove the class, it stops. No per-element C# wiring.

32 named easing curves — shared between C# and USS.

button.TweenScale(1.2f, 0.5f).SetEasing(EaseType.EaseOutBack); // from code

.bounce-in { animation: pop 0.4s ease-out-back forwards; } /* same curve, from USS */

Linear, sine, quad, cubic, quart, quint, expo, circ, back, elastic, bounce, plus damped spring — all 32 reachable as EaseType.X in C# and as kebab-case keywords in USS (ease-out-back, ease-out-bounce, ease-in-out-elastic, spring, …). Same math under both names. Plus full CSS cubic-bezier(x1, y1, x2, y2) and steps(n, start|end) for the cases where the named curves aren't enough.

22 presets — fade, slide, scale, shake, pulse, bounce, heartbeat, jiggle, flash, typewriter, and more.

One call: card.FadeIn(0.3f), card.SlideInLeft(0.4f), card.ShakeHorizontal(0.5f, 10f), card.Bounce(0.6f), text.TypeWriter(0.05f). Every preset returns a TweenHandle you can await, chain, or control. The USS side ships a parallel preset library — 13 .tw-* classes (.tw-shimmer, .tw-pulse, .tw-glow-border, .tw-spin, .tw-fade-in, .tw-slide-in-left/right/top/bottom, .tw-bounce-in, .tw-shake, .tw-color-cycle, .tw-skeleton-loading, .tw-attention-ring, .tw-float) that drop a polished animation onto any element without writing a @keyframes block yourself.

Sequences for composed motion.

TweenSequence.Create()
.Append(card.FadeIn(0.3f))
.Append(card.TweenScale(1.05f, 0.2f))
.Join(card.TweenBackgroundColor(highlight, 0.2f))
.OnComplete(() => Debug.Log("done"));

Append for chained, Join for parallel, Insert for time-positioned, plus four stagger directions (first-to-last, last-to-first, center-out, edges-in) for collection animations. Await a whole sequence or any subset with WaitForAll / WaitForAny.

Auto-cleanup on element detach.

Every tween and every keyframe animation silently disposes itself when its target element leaves the panel. Stop your scene, swap panels, destroy a UIDocument — there are no leaked update callbacks, no orphaned coroutines, and you didn't write a single cleanup line. Need explicit control? Hold the returned handle and kill it yourself.

Two demo scenes included.

TweenDemo — every property tween with a toggle button, every preset wired up, a 31-curve easing visualizer animating side-by-side, a sequence builder demo (Append, Join, complex sequences), a stagger demo (8 items × 4 directions), text animations (TypeWriter, CountTo, Scramble), a live performance counter, and a Reset All. Under the easing visualizer: a USS-driven @keyframes sub-section with four cards (pulse, spin, glow, float) that auto-animate from class assignment alone — the same engine, just from USS. 

LoadingStatesDemo — skeleton placeholders, a spinner, and a pulsing progress bar, all driven from .tw-* classes.

Plays well with the rest of the UI Toolkit Components suite.

Tween Engine is the animation engine for the entire portfolio. Open Tools > KrookedLilly > Setup to enable integrations with any installed sibling asset — UI Toolkit: Screen Manager, Focus & Navigation, Responsive Layout, Modal & Notifications, Theme Switcher, Form Validation, Data Binding, or ECS Bridge. Each integration ships disabled by default; flip the toggle and the sibling asset's runtime starts using Tween Engine immediately.

With UI Toolkit: Screen Manager: four IScreenTransition implementations powered by Tween Engine — slide, scale, fade, and crossfade — snap into Screen Manager's navigation system the moment you enable the integration. Pick a transition per screen or set a default; the tween runtime handles the rest. Without the toggle on, Screen Manager uses its built-in CSS transitions.

Works on every platform.

Runs under Mono and IL2CPP scripting backends. Uses the standard Unity AOT path that runs on iOS, Android, WebGL, and consoles. Zero-allocation update loop and pooled tween handles keep the GC clean during steady-state animation.

Full C# source, no DLLs.

XML documentation on every public API. Zero external dependencies.

From the publisher's Asset Store listing.

Technical details

Imperative tween API

  • TweenOpacity, TweenTranslate, TweenScale (uniform + non-uniform), TweenRotate, TweenWidth/TweenHeight/TweenMaxWidth/TweenMaxHeight, TweenLeft/TweenTop/TweenRight/TweenBottom, TweenMargin (uniform + per-side), TweenPadding (uniform + per-side), TweenBorderRadius (uniform + per-corner), TweenBorderWidth (uniform + per-side), TweenBorderColor (uniform + per-side), TweenBackgroundColor, TweenColor, TweenFontSize, TweenFlexGrow
  • Every method returns TweenHandle; chain .SetEasing(EaseType), .SetEasing(AnimationCurve), .SetEasing(Func<float,float>), .SetDelay(seconds), .SetLoops(count, LoopType.Restart|PingPong|Yoyo), .From(value), .SetRelative(true), .SetId(object), .OnStart(...), .OnUpdate(...), .OnComplete(...), .OnKill(...), .Play(), .Pause(), .Kill(complete: false), .Complete(), .Restart(), .ToAwaitable(CancellationToken)
  • TweenManager.KillAll(element), TweenManager.KillAll(), TweenManager.GlobalSpeed, TweenManager.GlobalPaused, TweenManager.ActiveTweenCount

Easing

  • EaseType enum — 32 values: Linear, in/out/in-out variants for Sine, Quad, Cubic, Quart, Quint, Expo, Circ, Back, Elastic, Bounce, plus Spring
  • EasingFunctions.Evaluate(EaseType, float t) — direct math access
  • CssTimingFunction.FromEaseType(EaseType) — bridge from EaseType to the USS-side timing-function struct
  • CssTimingFunction.CubicBezier(x1, y1, x2, y2) — overshoot-capable (Y unconstrained)
  • CssTimingFunction.Steps(count, StepsJumpTerm.End|Start)
  • USS keyword surface: CSS spec (linear, ease, ease-in, ease-out, ease-in-out, cubic-bezier(...), steps(...)) plus kebab-case Penner extensions (ease-in-sine, ease-out-quad, ease-in-out-cubic, ease-out-back, ease-in-bounce, ease-out-elastic, spring, …)

Sequences

  • TweenSequence.Create() — fluent builder
  • Append(handle) — chain after the current end
  • Join(handle) — start in parallel with the previous append
  • Insert(timeOffset, handle) — explicit time-positioned
  • AppendInterval(seconds) — gap in a chain
  • Stagger.From(elements, makeHandle, interval, StaggerMode.FirstToLast|LastToFirst|CenterOut|EdgesIn)
  • Awaitable, killable, pausable as one unit

Presets

  • FadeIn, FadeOut, FadeSlide, ScaleIn, ScaleOut, ScaleOutBounce, SlideOutLeft/Right/Top/Bottom, Bounce, Pulse, Flash, Heartbeat, Jiggle, Shake, ShakeVertical, Collapse, Expand
  • Text presets: TypeWriter, CountTo, Scramble
  • USS preset library: .tw-shimmer, .tw-pulse, .tw-glow-border, .tw-spin, .tw-fade-in, .tw-fade-out, .tw-slide-in-left/right/top/bottom, .tw-bounce-in, .tw-shake, .tw-color-cycle, .tw-skeleton-loading, .tw-attention-ring, .tw-float
  • All preset USS lives in Presets/keyframe-presets.uss; load via <ui:Style src="..."> or Keyframes.RegisterPresets()

@keyframes engine

  • Full CSS @keyframes block syntax + animation shorthand parser
  • 14 animatable USS properties: opacity, translate, scale, rotate, width/height/min-/max-, margin (uniform + per-side), padding (uniform + per-side), border-radius (uniform + per-corner), border-width (uniform + per-side), border-color (uniform + per-side), background-color, color, font-size, left/top/right/bottom, flex-grow/flex-shrink
  • Keyframes.RegisterStyleSheet(text, sourcePath) / Keyframes.RegisterStyleSheet(textAsset) — register @keyframes blocks from any USS source
  • Keyframes.RegisterPresets() — register the bundled preset library
  • KeyframeAnimator manipulator — auto-starts / -stops animations as .tw-* classes are added or removed
  • KeyframeAnimator.ScanDescendants(root) — attach manipulators to every descendant with a .tw-* class in one call
  • C# escape hatch: element.PlayAnimation("name", duration, delay, iterationCount, timingFunction, fillMode), PauseAnimation, ResumeAnimation, StopAnimation, StopAllAnimations, IsAnimating
  • Lifecycle events bubble up the tree: AnimationStartEvent, AnimationEndEvent, AnimationCancelEvent
  • One runtime: every @keyframes animation registers as a TweenHandle with TweenManager, so the same update loop, easing dispatch, and auto-cleanup pipeline drives both authoring paths

Cross-asset integrations

  • Tools > KrookedLilly > Setup is the one-stop unified matrix window for enabling integrations with every installed sibling asset. One toggle per integration; integrations ship disabled and the customer flips what they want.
  • Supported siblings: UI Toolkit: Screen Manager, Focus & Navigation, Responsive Layout, Modal & Notifications, Theme Switcher, Form Validation, Data Binding, ECS Bridge.

Editor

  • Unified Setup window (Tools > KrookedLilly > Setup) — enable/disable Tween Engine integrations with any installed sibling asset

Included demos

  • TweenDemo — every property tween + every preset + 31-curve easing visualizer + sequences + stagger + text animations + a USS-driven @keyframes sub-section
  • LoadingStatesDemo — skeleton, spinner, pulsing progress bar via .tw-* classes

Compatibility

  • Unity 6+ (6000.0 and newer)
  • UI Toolkit (com.unity.modules.uielements)
  • Mono + IL2CPP (Standalone verified; iOS / Android / WebGL / consoles supported via standard AOT path)
  • Full C# source, no DLLs
  • XML documentation on all public APIs
  • Zero external dependencies

Compatibility

Render pipelines supported in each Unity version
Unity version Built-in URP HDRP Custom
6000.3.10f1 Compatible Compatible Compatible Compatible

As listed on the Asset Store.