Unity3d 如何在三种颜色之间为lerp编写代码?

Unity3d 如何在三种颜色之间为lerp编写代码?,unity3d,unityscript,Unity3d,Unityscript,我需要lerp之间的3种颜色的基础上的数字范围0-1。 这是怎么做到的?我正在用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

我需要lerp之间的3种颜色的基础上的数字范围0-1。 这是怎么做到的?我正在用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); 
}
if(s0.5){
renderer.material.color=color.Lerp(colorEnd、colorStart、s);
}

渐变就是你所需要的>

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


您甚至可以选择3种以上的颜色:)

首先,这里有一个Tween函数,可以随时间选择单个值。 可以在颜色组件的每个值上使用它。我相信还有更有效的方法

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;
}

实际上,您正在做的工作也会很好,您只需放大代码中的变量“s”,因为您希望每个color.Lerp使用0到1之间的值

所以,如果你要建立一个简单的梯度版本,它看起来就像你拥有的一样,但是对你的“s”值应用一个比例重映射

首先,在每个If语句中(或者理想情况下作为If语句中的函数调用),您可以将“s”重新缩放为0到1之间的值


所以如果“s”应该是
欢迎!堆栈溢出不是一个人们将为您完成所有工作的地方。你应该如何提问,什么样的问题是可以接受的。在这种情况下,您应该尝试一些东西,并向我们展示到目前为止您拥有的代码。这将有助于确定一个更具体的问题,然后我们可以帮助您解决这就是我现在的问题。如果(s0.5){renderer.material.color=color.Lerp(colorEnd,colorStart,s);}谢谢你给我指明了正确的方向。。我对unity是新手,所以我在很短的时间内学到了很多东西。干杯是的,在Unity 4.0上添加了渐变
if(s <= 0.5){
    s *= 2f;
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s);    
}
//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); 
}