Unity-在生成时获得随机颜色

时间:2019-02-28 11:17:33

标签: c# unity3d random spawn

我有一个小问题。...我想在我的场景中生成四边形,它们的材质都应该为红色或绿色。但是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);
        }
    }

3 个答案:

答案 0 :(得分:3)

如果只需要红色和绿色,则可以使用基本的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和该阵列的长度之间随机分配一个索引。

答案 1 :(得分:2)

为了获得随机的颜色,请尝试:

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

这样,您将获得随机索引,从而从数组中获得随机颜色。

答案 2 :(得分:0)

您可以使用 Random.Range() 方法生成一个介于 0 和 1 之间的随机数,并将该值作为 Color 类的颜色代码值。

考虑这个例子,

这里我将使用随机值更改球游戏对象的颜色。

ball.GetComponent<MeshRenderer>().material.color = new Color(Random.Range(0, 1f),Random.Range(0f, 1f),Random.Range(0f, 1f), 1f);