繁体   English   中英

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

[英]Random Color generation with one RGB set to 255

我想为我的背景获得随机颜色。 只有一件事,其中一个值应该是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;
    }

好的,几个问题。 第一个是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(Hue,Saturation,Value)值显式生成颜色:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM