我想为背景设置随机颜色。只有一件事,值之一应该是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;
}
答案 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);