首页 > 解决方案 > 一个 RGB 设置为 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;
    }

标签: c#unity3d

解决方案


好的,有几个问题。首先是Color该类使用从 0 到 1 的浮点值来表示其颜色。如果您希望明确地根据 0-255 比例设置值,那么您需要Color32该类。也就是说,Color可能为您提供了很好的服务并且有更多的功能可以启动,您只需要记住您想要使用的浮点版本Random.Range(),而不是整数版本。将参数指定为浮点数可以解决以下问题:

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]through访问颜色的 RGBA 组件color[3]。在那里,您实际上可以简化代码以生成随机颜色,然后覆盖随机索引:

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

现在这更好了,但考虑到你想要做什么,我会冒险猜测并说你想要一种不太暗或不饱和的颜色。考虑使用以下函数从 HSV(色相、饱和度、值)值显式生成颜色Color.HSVToRGB()

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

推荐阅读