Unity Tween Engine

Tween anything.
Allocate nothing.

A zero-GC tween engine for Unity with a clean fluent API, PlayerLoop runtime, no scene setup, and full source code included.

0B GC/frame runtime target Unity 2021.3 LTS+ Full source No scene runner
0B
GC/frame runtime target
30+
easing functions
16
extension targets
PlayerController.cs

What's included

Built for real Unity projects.

Gameplay, UI, camera, audio, materials, text, paths, designer-authored sequences, and migration tools. One package. One price.

Profiler-friendly by design

Tween state is stored in a flat pre-allocated struct array, so runtime updates avoid heap churn and GC spikes.

No scene baggage

NexTween runs from Unity's PlayerLoop. No hidden runner prefab, no required bootstrap scene, no MonoBehaviour dependency.

Migration-first workflow

Scan existing DOTween usage, preview changes, then apply only when the generated diff looks right.

Full source included

No black-box DLL. Debug it, extend it, and keep control when a project has unusual runtime requirements.

โšก
Zero allocation runtime
Tween state lives in a pre-allocated flat struct array. No heap pressure, no GC spikes mid-gameplay.
๐Ÿ”—
Fluent chaining
Chain easing, delay, loops, callbacks and more. Fire-and-forget or store a handle โ€” your choice.
๐Ÿ“ท
Cinemachine 3 extensions
TweenFOV, TweenDutch, ShakeFOV, TweenLens, TweenDollyPosition โ€” all via the same fluent API.
๐ŸŽจ
Material & shader tweens
Animate any float, color, or vector property by name. Built-in shorthands for dissolve and emission.
โœ๏ธ
TextMeshPro
Font size, alpha, color, character spacing, typewriter effect with optional cursor, animated number counter.
๐Ÿ“
Path movement
Catmull-Rom spline through any number of waypoints. LookAhead rotation, local-space paths, gizmo preview.
๐Ÿ’ฅ
Shake & punch
ShakePosition, ShakeRotation, ShakeScale, PunchPosition, PunchRotation โ€” decay-based, no manual reset.
๐Ÿ”Š
Audio tweens
TweenVolume, TweenPitch, FadeIn, FadeOut, WindDown. Smooth audio transitions without a coroutine.
โฑ๏ธ
DelayedCall & RepeatingCall
Cancellable replacements for Invoke() and InvokeRepeating(). Kill them before they fire.
๐ŸŽฌ
Sequences
Chain tweens, waits, and callbacks in order. Loop and ping-pong the whole sequence independently.
๐ŸŽ›๏ธ
Inspector authoring
NexTween Component and NexSequence Component let designers build animations with zero code.
๐Ÿ•น๏ธ
CharacterController extensions
Tween-driven dash, jump arc, knockback, blink, ledge snap, wall-run tilt, squash-stretch and FOV kick. Coyote time and input buffering built in.
๐Ÿ”„
DOTween migration tool
25 regex rules scan your project, preview diffs, and rewrite DOTween calls to NexTween in one click.
๐ŸŽฏ
Ease profiles
Author named ScriptableObject easing presets. Reference them by name from anywhere in your project.
๐Ÿ›
Live debugger
Window > NexTween > Debugger shows every active tween with live progress bars and per-tween kill buttons.
๐Ÿ•’
Unscaled time
Any tween runs on unscaled time with .UnscaledTime() โ€” survives pause screens and Time.timeScale = 0.

Already on DOTween?

Move from DOTween without rewriting by hand.

Open Window > NexTween > DOTween Migration Tool. It scans your project, previews every replacement, and only rewrites when you apply the diff.

DOTween Migration Tool โ€” preview 25 rules
using DG.Tweening;
โ†’
using NexTween;
transform.DOMove(target, 0.4f)
โ†’
transform.TweenPosition(target, 0.4f)
.SetEase(Ease.OutBack)
โ†’
.Ease(EasingType.OutBack)
.SetDelay(0.1f)
โ†’
.Delay(0.1f)
DOTween.Sequence()
โ†’
NexSequence.Create()
DOVirtual.DelayedCall(2f, cb)
โ†’
TweenRunner.DelayedCall(2f, cb)
.SetUpdate(true)
โ†’
.UnscaledTime()
DOTween.Kill(target)
โ†’
TweenRunner.KillAll(target)
Tweener myTween
โ†’
Tween myTween

API reference

Clean by design.

Every method returns a builder. Chain what you need, keep a handle when you need control, or discard it for fire-and-forget polish.

// World position
transform.TweenPosition(Vector3 target, float duration);
transform.TweenPositionX(float x, float duration);
transform.TweenPositionY(float y, float duration);
transform.TweenPositionZ(float z, float duration);

// Local position
transform.TweenLocalPosition(Vector3 target, float duration);
transform.TweenLocalPositionX(float x, float duration);
transform.TweenLocalPositionY(float y, float duration);

// Rotation
transform.TweenRotation(Vector3 eulerAngles, float duration);
transform.TweenLocalRotation(Vector3 eulerAngles, float duration);

// Scale
transform.TweenScale(float uniform, float duration);
transform.TweenScale(Vector3 target, float duration);
transform.PunchScale(float amount, float duration);

// Builder options โ€” chain any combination
  .Ease(EasingType.OutBack)
  .Ease(AnimationCurve curve)
  .Ease("ProfileName")
  .Delay(0.1f)
  .Loop(-1, pingPong: true)
  .UnscaledTime()
  .From(Vector3.zero)
  .OnComplete(() => DoSomething())
  .OnUpdate(t => { })
  .OnKill(() => Cleanup());
// Graphic (Image, Text, etc.)
graphic.TweenColor(Color target, float duration);
graphic.TweenAlpha(float target, float duration);
graphic.FadeIn(float duration);
graphic.FadeOut(float duration);

// CanvasGroup
canvasGroup.TweenAlpha(float target, float duration);
canvasGroup.FadeIn(float duration);
canvasGroup.FadeOut(float duration);

// RectTransform
rectTransform.TweenAnchoredPosition(Vector2 target, float duration);
rectTransform.TweenAnchoredPositionX(float x, float duration);
rectTransform.TweenAnchoredPositionY(float y, float duration);

// Slide-in panel example
panel.anchoredPosition = new Vector2(-600f, 0f);
panel.TweenAnchoredPositionX(0f, 0.5f)
     .Ease(EasingType.OutCubic).Delay(0.2f);
// Position
transform.ShakePosition(strength: 0.3f, duration: 0.5f, vibrato: 12);
transform.ShakeLocalPosition(strength: 0.3f, duration: 0.5f);

// Rotation
transform.ShakeRotation(strength: 15f, duration: 0.5f);

// Scale
transform.ShakeScale(strength: 0.2f, duration: 0.4f);

// Directional punch โ€” springs back with OutElastic
transform.PunchPosition(Vector3.up * 0.5f, duration: 0.4f);
transform.PunchRotation(new Vector3(0, 0, 15f), duration: 0.4f);
transform.PunchScale(1.3f, duration: 0.4f);

// All shakes decay automatically โ€” no manual reset needed
audioSource.TweenVolume(float target, float duration);
audioSource.TweenPitch(float target, float duration);
audioSource.FadeIn(float duration);   // sets volume=0, Play(), tweens to 1
audioSource.FadeOut(float duration);  // tweens to 0, Stop() on complete
audioSource.WindDown(float duration); // pitch to 0, then Stop()

// Music crossfade
outroTrack.FadeOut(1.5f).OnComplete(() => {
    introTrack.FadeIn(1.5f);
});
// Float properties
material.TweenFloat("_Cutoff", to: 1f, duration: 2f);
material.TweenDissolve(1f, 2f);              // shorthand for _Cutoff

// Color properties
material.TweenColor("_Color", Color.red, 0.3f);
material.TweenEmission(Color.cyan * 3f, 0.5f);

// Vector / tiling
material.TweenVector("_MainTex_ST", fromV4, toV4, 1f);
material.TweenTilingOffset(toTiling, toOffset, 1f);

// On Renderer (auto-creates material instance)
renderer.TweenDissolve(1f, 2f).Ease(EasingType.InCubic);
renderer.TweenEmission(Color.red * 2f, 0.3f);
// TextMeshPro support: NEXTWEEN_TMP can be added automatically by the setup script
text.TweenFontSize(48f, 0.3f);
text.TweenColor(Color.yellow, 0.2f);
text.TweenAlpha(0f, 0.5f);
text.FadeIn(0.4f);  text.FadeOut(0.4f);
text.TweenCharacterSpacing(10f, 0.3f);
text.TweenLineSpacing(2f, 0.2f);

// Typewriter effect
text.text = "Hello, world!";
text.TypewriterEffect(duration: 1.5f);
text.TypewriterEffect(duration: 2f, showCursor: true, cursor: '_');

// Animated number counter
scoreText.CountTo(from: 0f, to: 9999f, duration: 2f, format: "N0");
// Catmull-Rom spline through waypoints
transform.TweenPath(waypoints, 3f).Ease(EasingType.InOutCubic);

// Rotate to face direction of travel
transform.TweenPathLookAhead(waypoints, 3f);

// Use Transform array (positions sampled at play time)
transform.TweenPath(waypointTransforms, 4f);

// Move through intermediate points to a destination
transform.TweenThrough(viaPoints, destination, 2f);

// Local-space path (relative to parent)
transform.TweenLocalPath(localWaypoints, 2f);

// Preview in Scene view
void OnDrawGizmos() => PathExtensions.DrawPathGizmo(waypoints, Color.yellow);
NexSequence.Create()
    .Append(transform.TweenPosition(pointA, 0.4f).Ease(EasingType.OutCubic))
    .AppendInterval(0.2f)
    .Append(transform.TweenScale(1.2f, 0.2f).Ease(EasingType.OutBack))
    .AppendCallback(() => sfx.Play())
    .Append(canvasGroup.FadeOut(0.3f))
    .OnComplete(() => Debug.Log("done"))
    .Loop(3, pingPong: true)
    .Play();

// Or author entirely in the Inspector:
// Component > NexTween > Sequence Component
// Cancellable Invoke() replacement
Tween t = TweenRunner.DelayedCall(2f, () => SpawnEnemy());
t.Kill(); // cancel before it fires

// Repeating callback
Tween tick = TweenRunner.RepeatingCall(1f, UpdateHUD, loops: -1);
tick.Kill();

// Tween handle control
Tween t = transform.TweenScale(1.5f, 0.3f);
t.Pause();     t.Play();     t.Kill();
t.Complete();  // jump to end, fire OnComplete
t.Seek(0.5f); // jump to halfway

// Kill by target
TweenRunner.KillAll(transform);
TweenRunner.KillAll();

// Named ease profiles
transform.TweenPosition(target, 0.4f).Ease("SnappyUI");
// โ”€โ”€ Dash โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenDash(direction, distance: 5f, duration: 0.18f).Ease(EasingType.OutQuart);
cc.TweenDashFacing(direction, distance: 5f, duration: 0.18f); // also rotates

// โ”€โ”€ Jump โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenJump(height: 3f, duration: 0.6f);               // parabola default
cc.TweenJump(height: 3f, duration: 0.6f, curve: myCurve); // designer curve
cc.TweenJumpTo(targetPosition, height: 3f, duration: 0.6f); // lands on point

// โ”€โ”€ Knockback โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenKnockback(direction, force: 5f, duration: 0.35f, upwardPop: 1f);

// โ”€โ”€ Blink / teleport โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenBlink(destination, preDelay: 0f);

// โ”€โ”€ Ledge snap โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenLedgeSnap(snapPosition, duration: 0.18f); // disables CC during snap

// โ”€โ”€ Wall run โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.TweenWallRunTilt(cameraTransform, tiltAngle: 12f, rightWall: true);
cc.TweenWallRunUntilt(cameraTransform);

// โ”€โ”€ Squash-stretch (on visual mesh child) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.PlayLandSquash(meshTransform, squashAmount: 0.65f, stretchAmount: 1.15f);
cc.PlayJumpStretch(meshTransform, stretchAmount: 1.25f);

// โ”€โ”€ FOV kick on dash โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
cc.PlayDashFOVKick(camera, kickAmount: 12f, duration: 0.3f);

// โ”€โ”€ Coyote time + input buffering โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Tween coyote = cc.StartCoyoteTimer(0.12f, () => _canJump = false);
coyote.Kill(); // consume on jump

Tween buffer = cc.StartInputBuffer(0.1f, () => _bufferedJump = false);
buffer.Kill(); // consume on land
// Cinemachine support: NEXTWEEN_CINEMACHINE can be added automatically by the setup script
// Requires com.unity.cinemachine 3.x

cam.TweenFOV(40f, 0.8f).Ease(EasingType.OutCubic);
cam.TweenOrthoSize(5f, 0.5f);
cam.TweenDutch(12f, 0.3f);
cam.PunchDutch(8f, 0.6f);
cam.ShakeFOV(strength: 5f, duration: 0.5f);
cam.TweenDollyPosition(0.75f, 2f);
cam.TweenLens(targetLensSettings, 1f).Ease(EasingType.OutQuad);

// Works in sequences
NexSequence.Create()
    .Append(cam.TweenFOV(40f, 0.8f).Ease(EasingType.OutCubic))
    .AppendInterval(2f)
    .Append(cam.TweenFOV(60f, 0.5f).Ease(EasingType.InQuad))
    .Play();

How it stacks up

Feature comparison.

A focused comparison against common Unity tweening workflows.

Feature NexTween $12 DOTween Pro $15 DOTween Free PrimeTween Free
CharacterController extensionsโœ“โœ—โœ—โœ—
Zero allocation runtimeโœ“โœ“โœ“โœ“
PlayerLoop driven (no scene object)โœ“โœ—โœ—โœ“
Material / shader property tweensโœ“โœ“LimitedLimited
TextMeshPro extensionsโœ“โœ“โœ—โœ—
Typewriter effectโœ“โœ—โœ—โœ—
Audio tweensโœ“โœ“Limitedโœ—
Path movement (Catmull-Rom)โœ“Pro onlyโœ—โœ—
Cinemachine 3 extensionsโœ“โœ—โœ—โœ—
Inspector authoring (no code)โœ“Pro onlyโœ—โœ—
Named ease profiles (ScriptableObject)โœ“โœ—โœ—โœ—
DOTween migration toolโœ“โœ—โœ—โœ—
Live debugger windowโœ“Basicโœ—โœ—

Comparison is intended as a quick buying guide, not a legal feature matrix. Verify current versions and pricing before publishing final marketing claims.


Trust & workflow

Built to drop into production.

NexTween is positioned for developers who care about performance, readable code, and predictable behaviour across gameplay and UI.

Examples included

Use the sample scenes to test transform, UI, path, sequence, CharacterController, TextMeshPro, and Cinemachine workflows before adding NexTween to your own scenes.

Designer-friendly options

Inspector components and ScriptableObject ease profiles let designers author animation without needing every interaction hard-coded.

Clean integration path

Optional integrations are guarded behind scripting defines, so projects without TMP or Cinemachine do not inherit unwanted dependencies.

Simple commercial offer

One-time purchase, no Pro tier, no feature add-ons, and full source code included so teams can debug and extend it.


Pricing

One price. Everything included.

$12
one-time purchase ยท Unity Asset Store
  • Full source code, no DLL
  • Zero-allocation PlayerLoop runtime
  • Transform, UI, Audio, Material, TMP, Path extensions
  • Shake, punch, and directional impact effects
  • CharacterController extensions (dash, jump, knockback, blink, ledge snap)
  • Coyote time and input buffering helpers
  • Cinemachine 3 integration
  • Inspector components for designer workflow
  • ScriptableObject named ease profiles
  • DOTween migration tool (25 rules)
  • Live debugger window
  • 30+ easing functions + custom curve support
  • Sequences with loops and ping-pong
  • Unity 2021.3 LTS and later
Coming Soon on Unity Asset Store

Replace this with the live Asset Store product link once the package is approved.