在 Unity 中生成随机颜色无法正常工作

Generating random color in Unity isn't working properly

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

    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;

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

编辑:

Color 构造函数采用从 0 到 1 的浮点值 .. 不是 0 到 255 之间的整数。正如 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;

实际原因是:Color 构造函数采用 float 值从 01 .. 不是 0 到 255 之间的整数。所以你在 0225 之间的随机值(226 是唯一的)将被限制在 1 所以结果很可能(有 225 比 1 的机会)总是是 1 或在其他情况下 0。 -> 颜色将始终为白色。

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

中一样

或者使用 Color32 和介于 0255 之间的 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,反之亦然。

public颜色颜色; color = new Color(Random.value,Random.value,Random.value,1.0f); 有 alpha 参数