はてなに知り合いができたから、Qiitaからはてなブログに戻ってみました。
ところで、16進数表記からUnityのColorクラスにしたいことってあると思います。けど、結構面倒です。例えば"#ffeeddff"という色をUnityのColorにしようと思ったら、
Color color = new Color( 1.0f, 0.933f, 0.867f,1.0f );
などとしないといけません。16進数から少数に変換するのが面倒です。
調べてみたところ、ColorUtility.TryParseHtmlStringを使う方法と、自前でuintから計算する方法があるみたいです。
自分の利用においては文字列じゃなくて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 ); }