在 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 值从 0
到 1
.. 不是 0 到 255 之间的整数。所以你在 0
和 225
之间的随机值(226 是唯一的)将被限制在 1
所以结果很可能(有 225 比 1 的机会)总是是 1
或在其他情况下 0
。 -> 颜色将始终为白色。
所以是的,您要么必须将其更改为 0
和 1
之间的值,就像在
中一样
或者使用 Color32
和介于 0
和 255
之间的 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 参数
所以我认为我有一个非常奇怪的错误..我有一个脚本,我在其中生成随机颜色并将其分配给播放器,问题是颜色始终是白色但是当我查看颜色面板时在 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 值从 0
到 1
.. 不是 0 到 255 之间的整数。所以你在 0
和 225
之间的随机值(226 是唯一的)将被限制在 1
所以结果很可能(有 225 比 1 的机会)总是是 1
或在其他情况下 0
。 -> 颜色将始终为白色。
所以是的,您要么必须将其更改为 0
和 1
之间的值,就像在
或者使用 Color32
和介于 0
和 255
之间的 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 参数