← All packages
Smooth Pro
Suavização independente de frame rate para Unity. A correção direta para o erro mais comum do Unity:
usar Lerp(value, target, 0.1f) todo frame.
O problema
Quebrado (dependente de 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);
Corrigido (independente de 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);
Início rápido
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); // --- Amortecedores de mola --- // 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);
Suavização exponencial - Smooth
Classe estática. Todos os métodos sobrecarregados para float, Vector2, Vector3, Quaternion e Color.
| Method | Description |
|---|---|
Smooth.Exp(value, target, speed, dt) | Suavização exponencial usando exp(-speed * dt). A correção principal. |
Smooth.ExpHalfLife(value, target, halfLife, dt) | Mesma matemática, parametrizada por meia-vida em segundos. Amigável para designers. |
Smooth.ExpAngle(value, target, speed, dt) | Versão com consciência de ângulo. Lida corretamente com o wrap 0/360. |
Smooth.SpeedFromBrokenLerpT(t, fps) | Converter valor t de lerp quebrado existente para velocidade correta em um fps de referência. |
Smooth.ConvergenceTime(speed, pct) | Quanto tempo para atingir uma dada porcentagem (padrão 99%) de convergência. |
Amortecedores de mola - Spring
Dinâmica de mola de segunda ordem com sub-stepping adaptativo para estabilidade de frame rate. Sobrecarregado para float, Vector2, Vector3.
| Method | Description |
|---|---|
Spring.Critical(val, target, ref vel, freq, dt) | Criticamente amortecido. Convergência mais rápida sem overshoot. |
Spring.Bouncy(val, target, ref vel, freq, bounciness, dt) | Sensação elástica/mola com elasticidade configurável (0-1). |
Spring.Damped(val, target, ref vel, freq, damping, dt) | Mola de segunda ordem geral com razão de amortecimento arbitrária. |
Funções de easing - Ease
30+ curvas padrão. Cada uma disponível como variantes In, Out e InOut.
| Família | Curvas |
|---|---|
| Polynomial | Quad, Cubic, Quart, Quint |
| Trigonometric | Sine |
| Exponential | Expo, Circ |
| Overshoot | Back, Elastic, Bounce |
| Hermite | SmoothStep, SmootherStep (Perlin variant) |
Ease.Lerp(start, end, t, EaseType) combina easing + interpolação em uma chamada.
Editor tools
Window > DAWG Tools > Smooth Inspector
- Modo exponencial - Gráfico lado a lado comparando Lerp naive vs Smooth.Exp em 30/60/144fps. Veja a dependência de frame rate visualmente.
- Modo mola - Visualização de curva de resposta mostrando overshoot, tempo de acomodação e ringing para configurações bouncy.
- Modo easing - Pré-visualização de forma de curva para todas as 30+ funções de easing.
- Teste de estresse dt - Teste sua suavização em FPS constante, frames com jitter, FixedUpdate e tick rates personalizados.
- Auxiliar de migração - Converte seus valores lerp quebrados existentes para velocidades exponenciais corretas. Código pronto para copiar e colar.
Instalação
// 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. Sem dependências externas.