public static SHSVColor Lerp(SHSVColor From, SHSVColor To, float T) { float t = Mathf.Clamp01(T); float HDelta = To.H - From.H; float SDelta = To.S - From.S; float VDelta = To.V - From.V; float NewH = From.H + (HDelta * t); float NewS = From.S + (SDelta * t); float NewV = From.V + (VDelta * t); return(new SHSVColor(NewH, NewS, NewV)); }
IEnumerator CompUpdate() { while (true) { if (TargetImage != null) { ElasedTime += UnityEngine.Time.smoothDeltaTime; bool bIsEndTime = (ElasedTime >= Time); bool bIsOnLoop = (bIsLoop || bIsLoopWithReverse); if (bIsEndTime) { if (!bIsOnLoop) { StopCoroutine("CompUpdate"); } else { if (bIsLoopWithReverse) { bIsReverse = !bIsReverse; } ElasedTime = 0.0f; } } float Percentage = (ElasedTime * InvTime); if (bIsReverse) { Percentage = (1.0f - Percentage); } TargetImage.color = SHSVColor.HSVColorToRGB(SHSVColor.Lerp(BeginColor, TargetColor, Percentage)); } yield return(null); } }
public static Color HSVColorToRGB(SHSVColor HSVColor) { Color Result = new Color(); if (HSVColor.S <= 0.0f) { Result.r = HSVColor.V; Result.g = HSVColor.V; Result.b = HSVColor.V; } else { float InH, p, q, t, ff; long i; InH = HSVColor.H; if (InH >= 360.0f) { InH = 0.0f; } InH /= 60.0f; i = (long)InH; ff = InH - i; p = HSVColor.V * (1.0f - HSVColor.S); q = HSVColor.V * (1.0f - (HSVColor.S * ff)); t = HSVColor.V * (1.0f - (HSVColor.S * (1.0f - ff))); switch (i) { case 0: Result.r = HSVColor.V; Result.g = t; Result.b = p; break; case 1: Result.r = q; Result.g = HSVColor.V; Result.b = p; break; case 2: Result.r = p; Result.g = HSVColor.V; Result.b = t; break; case 3: Result.r = p; Result.g = q; Result.b = HSVColor.V; break; case 4: Result.r = t; Result.g = p; Result.b = HSVColor.V; break; default: Result.r = HSVColor.V; Result.g = p; Result.b = q; break; } } Result.a = 1.0f; return(Result); }