色彩随机线性变换

川长思鸟来 2023-10-18 16:34 166阅读 0赞

有时候做一些颜色随机,需要变化,但是跨度太大不好看,最好有一个过度,就是改变一个色值,达成一个循环,这样变化看起来比较柔和.

  1. //获取一个随机颜色位置
  2. public static float GetLineColorSeed(float colorMin = 0f, float colorMax = 1f)
  3. {
  4. float range = colorMax - colorMin;
  5. float randomrange = range * 6f;
  6. return UnityEngine.Random.Range(0, randomrange);
  7. }
  8. //循环变色,colorSeed是颜色的随机基位置,step是每个周期的位置
  9. public static Color GetLineColor(float colorSeed, float alpha, float step ,float colorMin = 0f, float colorMax = 1f)
  10. {
  11. float range = colorMax - colorMin;
  12. float randomrange = range * 6f;
  13. float nowC = (colorSeed + step) % randomrange;
  14. Color color;
  15. color.a = alpha;
  16. if (nowC < range)
  17. {
  18. //R 变大
  19. color.r = nowC % range;
  20. color.g = colorMin;
  21. color.b = colorMax;
  22. }
  23. else if (nowC < range * 2)
  24. {
  25. //B 变小
  26. color.r = colorMax;
  27. color.g = colorMin;
  28. color.b = colorMax - nowC % range;
  29. }
  30. else if (nowC < range * 3)
  31. {
  32. //G 变大
  33. color.r = colorMax;
  34. color.g = colorMin + nowC % range;
  35. color.b = colorMin;
  36. }
  37. else if (nowC < range * 4)
  38. {
  39. //R 变小
  40. color.r = colorMax - nowC % range;
  41. color.g = colorMax;
  42. color.b = colorMin;
  43. }
  44. else if (nowC < range * 5)
  45. {
  46. //B 变大
  47. color.r = colorMin;
  48. color.g = colorMax;
  49. color.b = colorMin + nowC % range; ;
  50. }
  51. else
  52. {
  53. //G 变小
  54. color.r = colorMin;
  55. color.g = colorMax - nowC % range;
  56. color.b = colorMax;
  57. }
  58. //Debug.Log( color.ToString());
  59. return color;
  60. }

调用

  1. //先随机一个颜色.
  2. float colorSeed = Fun.GetLineColorSeed(0f, 0.7f);
  3. colorStep每次增加,来改变颜色,这样过度比较平滑.
  4. Color corFrom = Fun.GetLineColor(colorSeed, 1f, colorStep, 0f, 0.7f);
  5. colorStep += 0.01f;

发表评论

表情:
评论列表 (有 0 条评论,166人围观)

还没有评论,来说两句吧...

相关阅读

    相关 色彩随机线性变换

    有时候做一些颜色随机,需要变化,但是跨度太大不好看,最好有一个过度,就是改变一个色值,达成一个循环,这样变化看起来比较柔和. //获取一个随机颜色位置