前言

HEX16进制颜色值转化为RGB原理非常简单:取前两位,化为10进制,即为R;取中间两位,化为10进制,即为G;取后两位,化为10进制,即为B。

但如果用这个RGB数值去new一个Color的话,得到的颜色却总是为白色或黑色。

原因

Unity Color构造方法里的三个(或四个,如有alpha)参数的取值并不是0-255,而是0-1,它们代表的是颜色百分比。我们需要将RGB数值与255相除,获得所需的比例数值。

代码

//16位颜色转换为UnityColor 颜色
public Color GetColor(string color)
{
    if (color.Length == 0)
    {
        return Color.black;//设为黑色
    }
    else
    {
        //#ff8c3 除掉#
        color = color.Substring(1);
        int v = int.Parse(color, System.Globalization.NumberStyles.HexNumber);
        //转换颜色
        return new Color(
        //int>>移位 去低位
        //&按位与 去高位
        ((float)(((v >> 16) & 255))) / 255,
        ((float)((v >> 8) & 255)) / 255,
        ((float)((v >> 0) & 255)) / 255
        );
    }
}

后记

别人的博客追求文章质量,我的文章质量太渣,只能靠数量了。

引用资料

1、[头图]【Unity】Unity-Japan UnityChanSD角色

我来吐槽

*

*

5位绅士参与评论

  1. 熊猫小A09-19 17:32 回复

    哇广告好丧心病狂啊,文章前有文章后有窗口顶有文档末还有

  2. mikusa09-05 14:58 回复

    笨兔子笨兔子笨兔子笨兔子笨兔子笨兔子,重要的事情重复六次嘻嘻

  3. littleplus09-03 01:15 回复

    笨兔子笨兔子笨兔子,重要的事情重复三次嘻嘻嘻

  4. 熊猫小A09-01 21:54 回复

    诶,“16位颜色”这个说法有点不准确,应该是“16进制”。第一眼看到死活没想明白为啥有颜色是 16 位的,又想了半天为啥只用前两位中间两位和末两位哈哈。

    • 野兔09-02 00:03 回复

      哦哦哦,我们平时上班叫习惯了 :mrgreen:

      • Gazzz09-02 07:28 回复

        野兔现在是从事前端类还是设计类的工作啊?

        • 野兔09-02 10:43

          客户端开发。

    • 野兔09-02 00:05 回复

      已修正。