🎨

[Unity]カラーコードをColor型に変換

に公開

前提

Unityエディタ上でGUIで色を指定する際、FFFFFFや00FF00のような16進数のカラーコードを使いますが、スクリプトで色を扱う際に用いるColorクラスでは、0~1のfloatでRGBの値を指定します。

using UnityEngine;

// Colorクラスのコンストラクタ。0 ~ 1のfloatでRGBを指定する
Color textColor = new Color(1.0f, 1.0f, 1.0f);


エディタ上で色を選択するときは、カラーコードを使用する

カラーコードで指定された色をスクリプトで使用する場合、数値を変換する必要があり、面倒でミスが発生しやすいです。

本題

新しく色変換用の関数を用意することなく変換できる方法を探しました。
以下の方法で一行にまとめることができます。

using UnityEngine;

// #FFFFFFをColorに変換する場合
Color textColor = Color32(0xFF, 0xFF, 0xFF, 0xFF);

Color32は、floatの代わりに0~255の32bit整数でRGBAを指定することができ、Color型に暗黙に変換できます。

Color32と16進表記を使うことで意外と簡単に表すことができました。可読性も比較的高く、標準の機能のみで実現できるのが良いと思います。
難点は、16進数であることを示す0xを4回も書くことでしょうか。

別の方法

ColorUtilityクラスを使って実装することもできます。
この場合、カラーコードを"#FFFFFF"のような文字列で指定することができますが、Colorを関数の戻り値として受け取るには自前でラッパー関数を用意する必要がありそうです。

https://kan-kikuchi.hatenablog.com/entry/ColorUtility#google_vignette

Discussion