public static float MapCurve(float value, float inMin, float inMax, float outMin, float outMax, bool clamp, AnimationCurve inCurve) { var result = Map(value, inMin, inMax, outMin, outMax, clamp); if(inCurve != null && inCurve.length > 1) { var min = inMin < inMax ? inMin : inMax; var max = inMax > inMin ? inMax : inMin; var range = max - min; float nt = 0f; if(!Mathf.Approximately(range, 0f)) { nt = inCurve.GetDuration() * (Mathf.Clamp(value, min, max) - min) / (range); } else { Debug.LogWarning("Avoiding zero range for MapCurve, evaluating curve at nt = 0f"); } result = inCurve.Evaluate(nt) * result; } return result; }