phest / interpolations

Lightweight Unity library for smoothing movements and value progressions in code (dragging, easing, tweening).

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

About

Lightweight Unity library for smoothing movements and value progressions in code (dragging, easing, tweening).

License:Other


Languages

Language:C# 100.0%