← All packages

Smooth Pro

Lissage indépendant du frame rate pour Unity. Le correctif direct pour l'erreur Unity la plus courante : utiliser Lerp(value, target, 0.1f) à chaque frame.

v1.1.0 Unity 2021.3+ No dependencies namespace: DawgTools.Smooth

Le problème

Cassé (dépendant du frame rate)

// This runs every frame with a fixed 10% step.
// At 30fps: 30 steps/sec. At 144fps: 144 steps/sec.
// Players on faster machines see faster smoothing.
value = Mathf.Lerp(value, target, 0.1f);

Corrigé (indépendant du frame rate)

// Same behavior at any frame rate.
// Uses exp(-speed * dt) which naturally
// compensates for variable frame times.
value = Smooth.Exp(value, target, 10f, Time.deltaTime);

Démarrage rapide

using DawgTools.Smooth;

// --- Exponential smoothing ---

// Direct replacement for broken Lerp
transform.position = Smooth.Exp(transform.position, target, 10f, Time.deltaTime);

// Designer-friendly: "halfway to target in 0.2 seconds"
value = Smooth.ExpHalfLife(value, target, 0.2f, Time.deltaTime);

// Angle-aware (handles 0/360 wrap correctly)
angle = Smooth.ExpAngle(angle, targetAngle, 8f, Time.deltaTime);

// --- Amortisseurs à ressort ---

// Critically damped: fastest convergence, no overshoot
pos = Spring.Critical(pos, target, ref velocity, 5f, Time.deltaTime);

// Bouncy: overshoots and oscillates
scale = Spring.Bouncy(scale, targetScale, ref scaleVel, 8f, 0.5f, Time.deltaTime);

// --- Migration ---

// Convert your existing broken lerp value to correct speed
float speed = Smooth.SpeedFromBrokenLerpT(0.1f, 60f); // ~6.32

// --- Easing ---

float t = Ease.InOutCubic(progress);
value = Ease.Lerp(start, end, progress, EaseType.InOutElastic);

Lissage exponentiel - Smooth

Classe statique. Toutes les méthodes surchargées pour float, Vector2, Vector3, Quaternion et Color.

MethodDescription
Smooth.Exp(value, target, speed, dt)Lissage exponentiel utilisant exp(-speed * dt). Le correctif principal.
Smooth.ExpHalfLife(value, target, halfLife, dt)Même mathématique, paramétré par demi-vie en secondes. Convivial pour les designers.
Smooth.ExpAngle(value, target, speed, dt)Version sensible aux angles. Gère correctement le wrap 0/360.
Smooth.SpeedFromBrokenLerpT(t, fps)Convertir la valeur t d'un lerp cassé existant en vitesse correcte à un fps de référence.
Smooth.ConvergenceTime(speed, pct)Combien de temps pour atteindre un pourcentage donné (99% par défaut) de convergence.

Amortisseurs à ressort - Spring

Dynamique de ressort de second ordre avec sous-pas adaptatif pour la stabilité du frame rate. Surchargé pour float, Vector2, Vector3.

MethodDescription
Spring.Critical(val, target, ref vel, freq, dt)Amortissement critique. Convergence la plus rapide sans dépassement.
Spring.Bouncy(val, target, ref vel, freq, bounciness, dt)Sensation élastique/ressort avec rebond configurable (0-1).
Spring.Damped(val, target, ref vel, freq, damping, dt)Ressort de second ordre général avec ratio d'amortissement arbitraire.

Fonctions d'easing - Ease

30+ courbes standard. Chacune disponible en variantes In, Out et InOut.

FamilleCourbes
PolynomialQuad, Cubic, Quart, Quint
TrigonometricSine
ExponentialExpo, Circ
OvershootBack, Elastic, Bounce
HermiteSmoothStep, SmootherStep (Perlin variant)

Ease.Lerp(start, end, t, EaseType) combine easing + interpolation en un seul appel.

Editor tools

Window > DAWG Tools > Smooth Inspector

  • Mode exponentiel - Graphique côte à côte comparant Lerp naïf vs Smooth.Exp à 30/60/144fps. Visualisez la dépendance au frame rate.
  • Mode ressort - Visualisation de courbe de réponse montrant le dépassement, le temps de stabilisation et l'oscillation pour les paramètres rebondissants.
  • Mode easing - Aperçu de la forme de courbe pour toutes les 30+ fonctions d'easing.
  • Test de stress dt - Testez votre lissage sous FPS constant, frames avec jitter, FixedUpdate et tick rates personnalisés.
  • Assistant de migration - Convertit vos valeurs lerp cassées existantes en vitesses exponentielles correctes. Code prêt à copier-coller.

Installation

// Unity Package Manager > Add package from disk
// Navigate to package.json and select it

// Then import the demo scene:
// Package Manager > Motion Smoothing Pro > Samples > Import

Requires Unity 2021.3 LTS or newer. Aucune dépendance externe.