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

4

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

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

我修改了我的答案,以获取除红色和绿色之外的颜色。你可以看一下。 - Ali Kanat
3个回答

5

如果你只想要红色和绿色,你可以使用基本的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之间的小数,然后像这样在色彩之间进行插值:

    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到该数组长度之间随机选择一个索引。


我认为是这样的 - gameObject.GetComponent<Renderer>().material.color = Color.x; - Raycen
但是这行代码只有在你尝试改变脚本所附着的gameObject的颜色时才会起作用。我以为你正在使用 quad.gameObject.GetComponent<Renderer>().material.color = Color.x - Ali Kanat
不,那个脚本是用来实例化四边形的,但我认为最好在它们生成后再使用另一个四边形脚本来改变颜色。 - Raycen
如果Quad脚本附加在Quad预制体上,并且在其上有一个材质,那么gameObject.GetComponent<Renderer>().material.color = Color.x应该可以工作。您可以从另一个脚本中实例化它,这不是问题。 - Ali Kanat
1
好的,我明白了......对象出了问题......脚本运行正常。谢谢你的帮助! - Raycen
显示剩余2条评论

2
为了获得随机颜色,请尝试以下方法:

使用以下代码:

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

以这种方式,您将获得随机索引,从而从数组中获得随机颜色。翻译后的内容:

这样做可以得到一个随机的索引,从而获取数组中的随机颜色。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接