-
-
Save brettmjohnson/9819b86af431fb3acd72fe18e4f1e15d to your computer and use it in GitHub Desktop.
Compact and simple easing functions for Unity
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using UnityEngine; | |
| public class Easing | |
| { | |
| public static float Linear (float k) { | |
| return k; | |
| } | |
| public class Quadratic | |
| { | |
| public static float In (float k) { | |
| return k*k; | |
| } | |
| public static float Out (float k) { | |
| return k*(2f - k); | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return 0.5f*k*k; | |
| return -0.5f*((k -= 1f)*(k - 2f) - 1f); | |
| } | |
| }; | |
| public class Cubic | |
| { | |
| public static float In (float k) { | |
| return k*k*k; | |
| } | |
| public static float Out (float k) { | |
| return 1f + ((k -= 1f)*k*k); | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return 0.5f*k*k*k; | |
| return 0.5f*((k -= 2f)*k*k + 2f); | |
| } | |
| }; | |
| public class Quartic | |
| { | |
| public static float In (float k) { | |
| return k*k*k*k; | |
| } | |
| public static float Out (float k) { | |
| return 1f - ((k -= 1f)*k*k*k); | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return 0.5f*k*k*k*k; | |
| return -0.5f*((k -= 2f)*k*k*k - 2f); | |
| } | |
| }; | |
| public class Quintic | |
| { | |
| public static float In (float k) { | |
| return k*k*k*k*k; | |
| } | |
| public static float Out (float k) { | |
| return 1f + ((k -= 1f)*k*k*k*k); | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return 0.5f*k*k*k*k*k; | |
| return 0.5f*((k -= 2f)*k*k*k*k + 2f); | |
| } | |
| }; | |
| public class Sinusoidal | |
| { | |
| public static float In (float k) { | |
| return 1f - Mathf.Cos(k*Mathf.PI/2f); | |
| } | |
| public static float Out (float k) { | |
| return Mathf.Sin(k*Mathf.PI/2f); | |
| } | |
| public static float InOut (float k) { | |
| return 0.5f*(1f - Mathf.Cos(Mathf.PI*k)); | |
| } | |
| }; | |
| public class Exponential | |
| { | |
| public static float In (float k) { | |
| return k == 0f? 0f : Mathf.Pow(1024f, k - 1f); | |
| } | |
| public static float Out (float k) { | |
| return k == 1f? 1f : 1f - Mathf.Pow(2f, -10f*k); | |
| } | |
| public static float InOut (float k) { | |
| if (k == 0f) return 0f; | |
| if (k == 1f) return 1f; | |
| if ((k *= 2f) < 1f) return 0.5f*Mathf.Pow(1024f, k - 1f); | |
| return 0.5f*(-Mathf.Pow(2f, -10f*(k - 1f)) + 2f); | |
| } | |
| }; | |
| public class Circular | |
| { | |
| public static float In (float k) { | |
| return 1f - Mathf.Sqrt(1f - k*k); | |
| } | |
| public static float Out (float k) { | |
| return Mathf.Sqrt(1f - ((k -= 1f)*k)); | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return -0.5f*(Mathf.Sqrt(1f - k*k) - 1); | |
| return 0.5f*(Mathf.Sqrt(1f - (k -= 2f)*k) + 1f); | |
| } | |
| }; | |
| public class Elastic | |
| { | |
| public static float In (float k) { | |
| if (k == 0) return 0; | |
| if (k == 1) return 1; | |
| return -Mathf.Pow( 2f, 10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f); | |
| } | |
| public static float Out (float k) { | |
| if (k == 0) return 0; | |
| if (k == 1) return 1; | |
| return Mathf.Pow(2f, -10f*k)*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f) + 1f; | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return -0.5f*Mathf.Pow(2f, 10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f); | |
| return Mathf.Pow(2f, -10f*(k -= 1f))*Mathf.Sin((k - 0.1f)*(2f*Mathf.PI)/0.4f)*0.5f + 1f; | |
| } | |
| }; | |
| public class Back | |
| { | |
| static float s = 1.70158f; | |
| static float s2 = 2.5949095f; | |
| public static float In (float k) { | |
| return k*k*((s + 1f)*k - s); | |
| } | |
| public static float Out (float k) { | |
| return (k -= 1f)*k*((s + 1f)*k + s) + 1f; | |
| } | |
| public static float InOut (float k) { | |
| if ((k *= 2f) < 1f) return 0.5f*(k*k*((s2 + 1f)*k - s2)); | |
| return 0.5f*((k -= 2f)*k*((s2 + 1f)*k + s2) + 2f); | |
| } | |
| }; | |
| public class Bounce | |
| { | |
| public static float In (float k) { | |
| return 1f - Out(1f - k); | |
| } | |
| public static float Out (float k) { | |
| if (k < (1f/2.75f)) { | |
| return 7.5625f*k*k; | |
| } | |
| else if (k < (2f/2.75f)) { | |
| return 7.5625f*(k -= (1.5f/2.75f))*k + 0.75f; | |
| } | |
| else if (k < (2.5f/2.75f)) { | |
| return 7.5625f *(k -= (2.25f/2.75f))*k + 0.9375f; | |
| } | |
| else { | |
| return 7.5625f*(k -= (2.625f/2.75f))*k + 0.984375f; | |
| } | |
| } | |
| public static float InOut (float k) { | |
| if (k < 0.5f) return In(k*2f)*0.5f; | |
| return Out(k*2f - 1f)*0.5f + 0.5f; | |
| } | |
| }; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment