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



我一直在尝试使用脚本更改白色精灵的颜色。我有将其转换为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采用float0.0f - 1.0f,因此只需将您的值通过255f驱散您的值,以将其映射到float(%(值。


或者您可以简单地使用Color32,而byte0-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;

最新更新