Unityで16進数のColor表記からColorに変換する

はてなに知り合いができたから、Qiitaからはてなブログに戻ってみました。

ところで、16進数表記からUnityのColorクラスにしたいことってあると思います。けど、結構面倒です。例えば"#ffeeddff"という色をUnityのColorにしようと思ったら、

Color color = new Color( 1.0f, 0.933f, 0.867f,1.0f );

などとしないといけません。16進数から少数に変換するのが面倒です。


調べてみたところ、ColorUtility.TryParseHtmlStringを使う方法と、自前でuintから計算する方法があるみたいです。


qiita.com


baba-s.hatenablog.com


自分の利用においては文字列じゃなくてuintで十分なことが多いので、今回は後者のアプローチで行くことにしました。その方が速度的にも多少メリットがありますし。

後ろの記事に書かれていたコードをベースに、アルファ成分が指定されていた場合も動作するようにしました。

public static Color GetRgbColor( uint color ) 
{
    float r,g,b,a;
    var inv = 1.0f / 255.0f;
    if( color > 0xffffff )
    {
        r = ( ( color >> 24 ) & 0xff ) * inv;
        g = ( ( color >> 16 ) & 0xff ) * inv;
        b = ( ( color >> 8  ) & 0xff ) * inv;
        a = ( ( color       ) & 0xff ) * inv;
    }
    else
    {
        r = ( ( color >> 16 ) & 0xff ) * inv;
        g = ( ( color >> 8  ) & 0xff ) * inv;
        b = ( ( color       ) & 0xff ) * inv;
        a = 1.0f;
    }
    return new Color( r, g, b, a );
}