我一直在尝试使用脚本更改白色精灵的颜色。我有将其转换为RGB的十六进制阀,并尝试改变精灵的颜色。颜色改变了,但这并不是我需要的。它变为一些随机颜色。以下是我正在尝试的代码,我不明白我要去的位置。请帮助我。谢谢。
string tempColor;
tempColor = "E2270A";
Color m_NewColor;
float m_Red, m_Green, m_Blue;
m_Red = System.Convert.ToInt32 (tempColor.Substring (0, 2), 16);
m_Green = System.Convert.ToInt32 (tempColor.Substring (2, 2), 16);
m_Blue = System.Convert.ToInt32 (tempColor.Substring (4, 2), 16);
m_NewColor = new Color (m_Red, m_Green, m_Blue);
Animinstance.GetComponent<SpriteRenderer> ().color = m_NewColor;
非常简单地调用 ColorUtility.TryParseHtmlString
api,但应该添加'#'
Color color;
if( ColorUtility.TryParseHtmlString("#E2270A", out color))
{
Animinstance.GetComponent<SpriteRenderer>().color = color;
}
正如John提到的Color
采用float
值0.0f - 1.0f
,因此只需将您的值通过255f
驱散您的值,以将其映射到float
(%(值。
或者您可以简单地使用Color32
,而byte
值0-255
var tempColor = "E2270A";
var m_Red = System.Convert.ToByte(tempColor.Substring(0, 2), 16);
var m_Green = System.Convert.ToByte(tempColor.Substring(2, 2), 16);
var m_Blue = System.Convert.ToByte(tempColor.Substring(4, 2), 16);
// always requires the alpha parameter
var m_NewColor = new UnityEngine.Color32(m_Red, m_Green, m_Blue, 255);
Animinstance.GetComponent<SpriteRenderer>().color = m_NewColor;
Color32
可以隐式转换为Color
。
如果您查看颜色的文档,您会注意到该示例为float
值:
Color newColor = new Color(0.3f, 0.4f, 0.6f, 0.3f); // r, g, b, a
或
Color newColor = new Color(0.3f, 0.4f, 0.6f); // r, g, b
我们可以从示例中得出结论,Color
期望Valeus在0(HEX字符串中的0x00(和1(0xff(之间,但是这些十六进制值的整数值为0-255。因此,我们需要将它们除以255,以获取0到1之间的值:
string tempColor;
tempColor = "E2270A";
Color m_NewColor;
float m_Red, m_Green, m_Blue;
m_Red = System.Convert.ToSingle (tempColor.Substring (0, 2), 16) / 255.0f;
m_Green = System.Convert.ToSingle (tempColor.Substring (2, 2), 16) / 255.0f;
m_Blue = System.Convert.ToSingle (tempColor.Substring (4, 2), 16) / 255.0f;
m_NewColor = new Color (m_Red, m_Green, m_Blue);
Animinstance.GetComponent<SpriteRenderer> ().color = m_NewColor;