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

Ray*_*cen 4 c# random spawn unity-game-engine

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

\n\n
void SpawningSquadsRnd()\n    {\n        rndColor[0] = Color.red;\n        rndColor[1] = Color.green;\n\n        for (int i = 0; i < 5; i++)\n        {\n            GameObject quad = Instantiate(squadPrefab, new Vector3(Random.Range(- 23, 23), 1.5f, Random.Range(-23, 23)), Quaternion.identity);\n            int index = Random.Range(0, rndColor.Length);\n\n            quad.gameObject.GetComponent<Renderer>().material.color = //Random.Range(0, rndColor.Length);\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

Ali*_*nat 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);
    }
Run Code Online (Sandbox Code Playgroud)

如果你想要更好的东西,你可以在 0 和 1 之间随机浮动,然后在颜色之间进行 Lerp,如下所示:

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

如果您想完全随机化颜色,也可以使用它。但是,它使您对所获得的颜色的控制有限。

 quad.gameObject.GetComponent<Renderer>().material.color = Random.ColorHSV();
Run Code Online (Sandbox Code Playgroud)

ColorHSV方法有几个重载,可以让您对颜色进行一些控制,例如使用hueMinhueMax

控制颜色的另一种选择可以是@Szymon 所说的拥有一个包含大量颜色的颜色数组,并在 0 和该数组的长度之间随机分配一个索引。