实际上,您所做的也可以正常工作,您只需在代码中按比例放大变量 's',因为您希望每种 color.Lerp 使用 0 到 1 之间的值。
因此,如果您要构建 Gradient 功能的简单版本,它看起来就像您所拥有的一样,但会将比例重新映射到您的 's' 值。
主要是,在每个 If 语句(或理想情况下作为 If 语句的函数调用)中,您会将“s”重新缩放为 0 到 1 之间的值。
因此,如果“s”应该是<= 0.5
(如在您的第一个 If 语句中),那么您知道“s”将介于 0 和 0.5 之间。简单地乘以 2 会给你一个介于 0 和 1 之间的值,并且 color.Lerp 函数可以正常工作。
if(s <= 0.5){
s *= 2f;
renderer.material.color = Color.Lerp(colorEnd,colorStart, s);
}
但是你必须为以后多一点马西。
如果 's' 介于 0.5 和 1 之间,则需要手动重新映射比例。
数学公式为:
Y = (((X - x1) * (y2 - y1)) / (x2 - x1)) + y1
所以对于你的's',它看起来像:
newS = (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;
您的脚本看起来更像这样:
//declare variables somewhere before If statements:
color color1, color2, color3;
float newS, sMin, sMax, newMin = 0, newMax = 1;
//your If statements. you can always add more if you want more color ranges.
if(s >= 0 && <= 0.5){
sMin = 0;
sMax = 0.5;
newS = (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;
renderer.material.color = Color.Lerp(color2,color1, newS);
}
else if(s>0.5 && s<=1){
sMin = 0.5;
sMax = 1;
newS = (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;
renderer.material.color = Color.Lerp(color3,color2, newS);
}