【问题标题】:Generating random color in Unity isn't working properly在 Unity 中生成随机颜色无法正常工作
【发布时间】:2020-11-22 17:45:23
【问题描述】:

所以我认为我有一个非常奇怪的错误.. 我有一个脚本,我生成随机颜色并将其分配给播放器,问题是颜色始终是白色但是当我查看检查器中的颜色面板时它显示的是正常的随机颜色。另一个有趣的事情是,当我在播放模式下更改检查器中的颜色时,它实际上会改变

    float R = Random.Range(0, 226);
    float G = Random.Range(0, 226);
    float B = Random.Range(0, 226);
    ColorToBeGenerate = new Color(R, G, B);
    Player.GetComponent<SpriteRenderer>().color = ColorToBeGenerate;

【问题讨论】:

    标签: c# unity3d game-development


    【解决方案1】:

    编辑:

    Color 构造函数采用从 0 到 1 的浮点值 .. 不是 0 到 255 之间的 int。正如 derHuge 提到的

    如下修改你的代码

    float R = Random.Range(0, 226/255f);
    float G = Random.Range(0, 226/255f);
    float B = Random.Range(0, 226/255f);
    ColorToBeGenerate = new Color(R, G, B);
    Player.GetComponent<SpriteRenderer>().color = ColorToBeGenerate;
    

    【讨论】:

      【解决方案2】:

      实际原因是:Color 构造函数将 float 值从 0 带到 1 .. 不是 0 到 255 之间的整数。所以你的随机值在 0 和 @987654328 之间@(226 是唯一的)将被限制为 1,因此很可能(225 比 1)结果将始终为 1 或在另一种情况下为 0。 -> 颜色总是会变成白色。

      所以是的,您要么必须将其更改为 01 之间的值,就像在 other answer 中一样

      或者将Color320255 之间的int 值一起使用

      int R = Random.Range(0, 227);
      int G = Random.Range(0, 227);
      int B = Random.Range(0, 227);
      ColorToBeGenerate = new Color32(R, G, B, 255);
      Player.GetComponent<SpriteRenderer>().color = ColorToBeGenerate;
      

      Color32 可以隐式转换为Color,反之亦然。

      【讨论】:

        【解决方案3】:

        不久前我遇到了类似的错误。 使用 Color32 而不是 Color 为我修复了它。

        【讨论】:

        • 它有效,但我无法插入 int 或 float 变量以使其随机化,我意识到只有黄色可见的另一件事,有什么想法吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        相关资源
        最近更新 更多