我一直在尝试使用脚本更改白色精灵的颜色。 我有转换成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;
答案 0 :(得分:2)
非常简单地只需调用ColorUtility.TryParseHtmlString
api,但应添加'#'
Color color;
if( ColorUtility.TryParseHtmlString("#E2270A", out color))
{
Animinstance.GetComponent<SpriteRenderer>().color = color;
}
答案 1 :(得分:1)
正如John所述,Color
取float
个值0.0f - 1.0f
,因此只需将您的值用255f
来将它们映射到相应的{{1} }(%)值。
或者您可以简单地使用Color32
来代替,该方法采用float
值byte
0-255
答案 2 :(得分:0)
如果您查看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
期望值在0(十六进制字符串中的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;