【问题标题】:Unity - Get Random Color at SpawningUnity - 在生成时获得随机颜色
【发布时间】:2019-02-28 11:17:32
【问题描述】:

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

【问题讨论】:

  • 我编辑了我的答案以获得红色和绿色以外的颜色。你可以看看。

标签: c# unity3d random spawn


【解决方案1】:

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

【讨论】:

  • 谢谢,无论如何颜色都没有改变:(有什么想法吗?
  • 我想说我需要更多信息。您确定您正确访问了该材料吗?
  • 我是这么认为的——gameObject.GetComponent().material.color = Color.x;
  • 但该行仅在您尝试更改脚本附加到的游戏对象的颜色时才有效。我以为你在使用quad.gameObject.GetComponent&lt;Renderer&gt;().material.color = Color.x
  • 好的,我知道了……对象有问题……scipt 工作正常。感谢您的帮助!
【解决方案2】:

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

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

通过这种方式,您将获得随机索引,从而从数组中获得随机颜色。

【讨论】:

    【解决方案3】:

    您可以使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 2012-02-19
      • 2013-04-02
      • 2018-04-02
      • 2016-02-20
      • 2013-12-31
      相关资源
      最近更新 更多