Unity - получите случайный цвет на нересте - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть небольшая проблема .... я хочу порождать Квады в моей Сцене, и они все должны иметь либо красный, либо зеленый как Материал.Но функция Random.Range будет только int´s, как я могу ее решить ??

void SpawningSquadsRnd()
    {
        rndColor[0] = Color.red;
        rndColor[1] = Color.green;

        for (int i = 0; i < 5; i++)
        {
            GameObject quad = Instantiate(squadPrefab, new Vector3(Random.Range(- 23, 23), 1.5f, Random.Range(-23, 23)), Quaternion.identity);
            int index = Random.Range(0, rndColor.Length);

            quad.gameObject.GetComponent<Renderer>().material.color = //Random.Range(0, rndColor.Length);
        }
    }

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Если вы хотите использовать только красный и зеленый, вы можете добиться этого с помощью базовой структуры if и else, например:

    int index = Random.Range(0, 1);
    if(index == 1)
    {
        quad.gameObject.GetComponent<Renderer>().material.color = new Color(1, 0, 0);
    }
    else
    {
        quad.gameObject.GetComponent<Renderer>().material.color = new Color(0, 1, 0);
    }

Если вы хотите что-то лучше, вы можете сделать случайное число с плавающей точкой от 0 до 1, а затем Lerp.между цветами вроде этого:

    float index = Random.Range(0, 1);
    quad.gameObject.GetComponent<Renderer>().material.color = Color.Lerp(Color.red, Color.green, index);

Если вы хотите полностью рандомизировать раскраску, вы также можете использовать это.Тем не менее, он дает вам ограниченный контроль над цветами, которые вы получаете.

 quad.gameObject.GetComponent<Renderer>().material.color = Random.ColorHSV();

ColorHSV метод имеет несколько перегрузок, что дает вам некоторый контроль над цветом, например, используя hueMin и hueMax.

Другой вариант иметь контроль над цветами может быть, как указано @Szymon, имеющим массив цветов с большим количеством цветов и возвращающим индекс между 0 и длиной этого массива.

0 голосов
/ 28 февраля 2019

Чтобы получить случайный цвет, попробуйте:

var randomColor = rndColor[new Random().Next(0,rndColor.Length)]

Таким образом, вы получите случайный индекс и, следовательно, случайный цвет из массива.

...