dotween icon indicating copy to clipboard operation
dotween copied to clipboard

Combining Eases

Open Tehenauin opened this issue 1 year ago • 1 comments

Since I wanted to have an ease that starts with more acceleration than on the end and I didn't want to use Animation curves, I thought it would be great, to be able to combine two interpolate between two eases. Unfortunately I couldn't find a feature that does what I wanted, but I was able to create an Easefunction on my own.

this is what I came up with:

 public static EaseFunction CombinedEase(Ease easeIn, Ease easeOut, Ease interpolationEase = Ease.Linear)
 {
     return new EaseFunction((time, duration, overshootOrAmplitude, period) =>
     {
         float t = time / duration;
         float eIn = EaseManager.Evaluate(easeIn, null, t, 1, overshootOrAmplitude, period);
         float eOut = EaseManager.Evaluate(easeOut, null, t, 1, overshootOrAmplitude, period);
         float ti = interpolationEase == Ease.Linear ? t : EaseManager.Evaluate(interpolationEase, null, t, 1, overshootOrAmplitude, period);
         return (1-ti)*eIn + ti*eOut;
     });
 }

the interpolationEase gives control over how the the eases are blended. this gives a lot of flexibility.

With this function you can even get an ease that starts fast, becomes slower and ends fast again, which isn't possible with the default eases. You achieve that by putting an "Out Ease" in the easeIn field and an "In Ease" in the easeOut field. example: transform.DOMove(targetPosition, duration).SetEase(CombinedEase(Ease.OutQuad, Ease.InQuad))

I think it would be great to have something like this in DOTween by default. What do you think?

Tehenauin avatar Apr 10 '24 10:04 Tehenauin

It would also be great if DOVirtual.EasedValue(..) would work with EaseFunctions too. That would make it easier for me to use my functions since I am actually not using it for tweening but for manipulating waypoints for a tweening path.

Tehenauin avatar Apr 10 '24 11:04 Tehenauin