0

我需要根据数字范围 0 - 1 在 3 种颜色之间调整。这是如何完成的?我正在用javascript编码。我的想法,但我不知道如何实现:0.0 - 0.5、0.5 - 1.0 之间的条件和钳位?

这就是我现在拥有的:

if(s <= 0.5){
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s);    
}
else if(s>0.5){  
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s); 
}
4

3 回答 3

1

从这里开始是一个 Tween 函数,它随着时间的推移 Lerps 单个值。您可以在颜色分量的每个值上使用它。我相信有更有效的方法可以做到这一点。

public static float TweenValue (float from,float to,float time)
{
    if (from != to) 
    {
        if (Mathf.Abs(to-from) > 1.0)
        {
            from = Mathf.Lerp(from, to, time*Time.deltaTime);
        }
        else 
        {
            from = to;
        }       
    }

    return from;
}
于 2013-10-21T21:02:18.753 回答
1

渐变是您所需要的 > http://docs.unity3d.com/Documentation/ScriptReference/Gradient.html

该页面已经提供了很好的解释。

你甚至可以超过 3 种颜色 :)

于 2013-09-03T15:07:35.183 回答
0

实际上,您所做的也可以正常工作,您只需在代码中按比例放大变量 '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); 
}
于 2015-06-22T01:56:12.043 回答