目次
はじめに
Unityで色にこだわる場合、ウェブなどで使う「HTMLカラーコード」で扱う方が構造体の「Color」や「Color32」で扱うより、色見本などからコピペできて楽なので個人的におすすめです。
ユーティリティークラスでスタティックメソッドを用意して、どこからでも呼び出せるようにしたサンプルコードを紹介します。
ColorUtility.TryParseHtmlString
「HTMLカラーコード」を「Color」に変換してくれるメソッドはUnityが標準で用意してくれています。
public static bool TryParseHtmlString (string htmlString, out Color color);
boolを戻り値に持ち、文字列が正常に変換されれば「True」を返し、Colorを出力します。
ColorUtility-TryParseHtmlString - Unity スクリプトリファレンス
HTML カラー文字列に変換しようとします。
サンプルコード
public static class Util
{
public static Color HexToRGB(string hex)
{
if(ColorUtility.TryParseHtmlString(hex,out Color color)) return color;
else return Color.black;
}
}
【解説】
Util
クラスはMonoBehaviourを継承しないStaticクラスです。シーンに配置する必要はありません。HexToRGB()
は「HTMLカラーコード」の文字列を引数にして、Colorを返します。カラーコードが間違っていて正常に変換されない場合は黒を返します。
使い方
あらかじめ「HTMLカラーコード」を準備しておき、好きな箇所でHexToRGB()
を呼び出すだけです。
using UnityEngine;
using UnityEngine.UI;
public class Temp : MonoBehaviour
{
[SerializeField] Image[] img = new Image[5];
readonly string offwhite = "E6E6E6";//オフホワイト(#がないのでエラーになる)
readonly string satured = "#FF4040";//レッド 彩度落とし
void Start()
{
SetColor();
}
void SetColor()
{
img[0].color = Util.HexToRGB(offwhite);
img[1].color = Color.cyan;
img[2].color = Color.green;
img[3].color = Util.HexToRGB(satured);
img[4].color = Color.yellow;
}
}
その他
逆に「Color」を「HTMLカラーコード」に変換するメソッドもあります。
ColorUtility-ToHtmlStringRGBA - Unity スクリプトリファレンス
色を "RRGGBBAA" 形式で 16 進数文字列として返します。