[英]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.