Хорошо, пара вопросов. Во-первых, класс Color
использует значения с плавающей запятой от 0 до 1 для представления своих цветов. Если вы явно хотите установить значения по шкале 0-255, вам нужен класс Color32
. Тем не менее, Color
, вероятно, хорошо вам подходит и имеет больше возможностей для загрузки, вам просто нужно помнить, что вы хотите использовать float версию 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;
}
Теперь мы можем сжать это дальше. Следует помнить, что вы можете получить доступ к компонентам RGBA цвета, используя color[0]
- 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 (Hue, Saturation, Value) с помощью функции 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);
EDIT:
Знаешь что? Есть даже более чистый способ сделать это. Оказывается, у Random
есть функция с именем Random.ColorHSV()
:
Camera.main.backgroundColor = Random.ColorHSV(0f, 1f, 1f, 1f, 1f, 1f);