Unity-在生成时获得随机颜色 [英] Unity - Get Random Color at Spawning

查看:1273
本文介绍了Unity-在生成时获得随机颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个小问题....我想在我的场景中生成四边形,它们的材质都应该为红色或绿色.但是Random.Range函数只能是int,我该怎么解决??

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

解决方案

如果只需要红色和绿色,则可以使用基本的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方法有多个重载,使您可以对颜色进行一些控制,例如使用hueMinhueMax.

另一个可以控制颜色的选项可以是@Szymon所说的,它拥有一个颜色阵列,其中有很多颜色,并且在0和该阵列的长度之间随机分配了一个索引.

i have a little issue....i want to spawn Quads in my Scene and they all should have either red or green as Material. But the Random.Range function will only int´s, how could i solve it ??

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

解决方案

If you want only red and green you can achieve it with a basic if and else structure like this:

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

If you want something better you can random a float between 0 and 1 and then Lerp between colors like this:

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

If you want to fully randomized the coloring you can also use this as well. However, it gives you limited amount of control over colors you are getting.

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

ColorHSV method has several overloads which gives you some control over color like using hueMin and hueMax.

Another option to have control over colors can be as @Szymon stated having a color array with plenty of colors and randoming an index between 0 and length of that array.

这篇关于Unity-在生成时获得随机颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆