如何使用十六进制值更改白色精灵的颜色?

时间:2019-07-05 04:43:43

标签: c# unity3d

我一直在尝试使用脚本更改白色精灵的颜色。 我有转换成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;

3 个答案:

答案 0 :(得分:2)

非常简单地只需调用ColorUtility.TryParseHtmlString api,但应添加'#'

Color color;
if( ColorUtility.TryParseHtmlString("#E2270A", out color))
{
    Animinstance.GetComponent<SpriteRenderer>().color = color;
}

答案 1 :(得分:1)

正如John所述,Colorfloat个值0.0f - 1.0f,因此只需将您的值用255f来将它们映射到相应的{{1} }(%)值。


或者您可以简单地使用Color32来代替,该方法采用floatbyte

0-255
  

Color32可以与Color进行隐式转换。

答案 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;