随机颜色生成,其中一个RGB设置为255

时间:2019-03-30 11:40:15

标签: c# unity3d

我想为背景设置随机颜色。只有一件事,值之一应该是255。例如(234,85,38)不好,但是(33,255,82)很好。

当前,我尝试首先切换一个随机值,该值(R,G或B)应为255。然后在每种情况下,我都随机定义其他值。但这不起作用。

void setBackgroundColor(){
        Color color = new Color();
        switch(Random.Range(1,3)){
            case 1:
                color = new Color(255, Random.Range(1,255), Random.Range(1,255));
                break;
            case 2:
                color = new Color(Random.Range(1,255), 255, Random.Range(1,255));
                break;
            case 3:
                color = new Color(Random.Range(1,255), Random.Range(1,255), 255);
                break;
        }
        Camera.main.backgroundColor = color;
    }

1 个答案:

答案 0 :(得分:0)

好的,几个问题。首先是Color类使用从0到1的浮点值来表示其颜色。如果要显式地设置基于0-255范围的值,则需要Color32类。也就是说,Color可能会为您带来好处,并具有更多启动功能,您只需要记住要使用Random.Range() float 版本,而不要使用整数版。将参数指定为浮点可修复:

void setBackgroundColor(){
    Color color = new Color();
    switch(Random.Range(1,3)){
        case 1:
            color = new Color(1f, Random.Range(0f ,1f), Random.Range(0f, 1f));
            break;
        case 2:
            color = new Color(Random.Range(0f, 1f), 1f, Random.Range(0f, 1f));
            break;
        case 3:
            color = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), 1f);
            break;
    }
    Camera.main.backgroundColor = color;
}

现在,我们实际上可以进一步压缩它了。要记住的一点是,您可以使用color[0]color[3]访问颜色的RGBA分量。这样,您实际上可以简化代码,使其仅生成随机颜色,然后覆盖随机索引:

void setBackgroundColor() {
    Color color = new Color(Random.Range(0f, 1f), Random.Range(0f ,1f), Random.Range(0f, 1f));
    color[Random.Range(0,2)] = 1f;
    Camera.main.backgroundColor = color;
}

现在这更好了,但是考虑到您要尝试的操作,我要冒险猜测一下,说您想要的颜色不是太暗或不饱和。考虑使用Color.HSVToRGB()函数根据HSV(色相,饱和度,值)值显式生成颜色:

void setBackgroundColor() {
    Camera.main.backgroundColor = Color.HSVToRGB(Random.Range(0f, 1f), 1f, 1f);
}

以此,我们仅指定它是我们要随机化的颜色的色调,而不是其他任何颜色。实际上,还有另外一个优化:这是一个单行函数,可能只在一个地方调用。您可能会完全删除该函数调用,并将其替换为该函数的内容:

Camera.main.backgroundColor = Color.HSVToRGB(Random.Range(0f, 1f), 1f, 1f);

编辑: 你知道吗?有一种更干净的方法可以做到这一点。事实证明,Random具有一个名为Random.ColorHSV()的功能:

Camera.main.backgroundColor = Random.ColorHSV(0f, 1f, 1f, 1f, 1f, 1f);