interpolations
interpolations copied to clipboard
Lightweight Unity library for smoothing movements and value progressions in code (dragging, easing, tweening).
Interpolations
Lightweight Unity library for smoothing movements and value progressions in code (dragging, easing, tweening).
https://twitter.com/stephbysteph/status/1125462189450465280
API is currently experimental and may change.
Current Features
- Drag outs
- On the fly dampening of changes over time (float and Vector3)
- Optional control and status of snapping
- Easings
- Robert Penner easing equations, optimized
- Easings methods pluggable to Unity's Lerp methods
- Tweens
- Lightweight and flexible tweening suite
- Tween class extendable with two one-line methods
- If needed, direct control over Tween instances and updating, for specific requirements in update timing or instancing
- Optional runner abstraction handling instances and updates, with choice over which update event function to update within
- Optional abstraction sugar for different tween types
- Tween characteristics can be modified while tweening, for dynamic changes
- Tween instances can be reused, yo-yo-ed, or recycled
- Tween easings configurable through editor
- Pure tweens for tweens without side effects
- Closure tweens for custom tween instances (Float, Vector2-3, Quaternion, Color)
- Convenience tweens for Transform control (Position, Rotation, Scale)
Examples
Smoothing out sudden value changes
// (Within an update call, i.e. FixedUpdate)
mixer.volume = Volume;
|
v
mixer.volume = mixer.volume.DragOut(Volume, 30);
Adding easing to a lerp call
Vector3.Lerp(a, b, ratio);
|
v
Vector3.Lerp(a, b, I.Cubic.InOut(ratio));
Check this cheat sheet for the effect of the different equations.
Tweening a position, the abstracted way
Tweens.Run(new PositionTween(transform))
.To(targetPosition)
.Timing(0, 1, I.Circ.InOut);
or using a shortcut:
Tweens.RunPosition(transform)
.To(targetPosition)
.Timing(0, 1, I.Circ.InOut);
or having it update within FixedUpdate/LateUpdate instead of Update:
Tweens.Fixed.Run...
Tweens.Late.Run...
Tweening a position, the controlling way
Tween<Vector3> positionTween;
...
positionTween = new PositionTween(transform))
.To(targetPosition)
.Timing(0, 1, I.Circ.InOut)
.Start();
...
// In Update, FixedUpdate, or etc
positionTween.Update(Time.timeDelta)
Custom tweening instances
Tweens.RunFloat
(
() => mixer.GetFloat("sfxVol", out float vol) ? vol : 0,
vol =>
{
mixer.SetFloat("sfxVol", vol);
indicator.alpha = vol;
}
)
.To(targetVolume)
.Timing(0, 1, I.Sine.Out);
Tweens.Run(new ColorTween(myScript.GetColor, myScript.SetColor))
.To(Color.yellow)
.Timing(0, 1, I.Cubic.InOut);
Features Roadmap
- Pre-setter value processor closure in Tween
- More drag out types (Color, Quaternion, Vector2, etc)
- More closure tween types (Vector4, etc)
- Documentation
Possible features
- More convenience tweens for Unity classes (CanvasGroup, Image, etc)
- Eased sliders (editor and UI)
- Bezier and CatmullRom Interpolations
Meta
Interpolations https://github.com/phest/interpolations
By Steph Thirion.
Easing equations by Robert Penner, optimized by Tween.js authors.
All code open source under MIT License. See LICENSE file.