おもちゃラボ

Unityで遊びを作ってます

【Unity】スクリプトでRGBとHSVを相互に変換する方法

色空間を表す方法は色々(←ギャグではありません)あるのですが、その中でも有名なものに「RGB」と「HSV」があります。

f:id:nn_hokuson:20170414003339j:plain

RGBとHSVについて

RGBは毎度おなじみのR(Red)、G(Green)、B(Blue)の三原色を使って色を表現する方法です。

HSVはH(Hue)とS(Saturation)、V(Value)を使って色を表現します。Hueは色相、Saturationは彩度、Valueは明度を意味します。

Unityのカラーピッカーでも↓のボタンを押すことでRGBとHSV空間を切り替えることができます。

f:id:nn_hokuson:20170412193528p:plain:w150

ここではスクリプトからHSVを使ってマテリアルの色を指定する方法を紹介します。

スクリプトを使ったRGBとHSVの変換方法

スクリプトでRGBからHSV、またはHSVからRGBに変換するにはUnityEngine.ColorクラスのRGBToHSV、HSVToRGBメソッドを使います。

docs.unity3d.com

例えば、HSVを指定する3本のスライダがあったとして、これをマテリアルの色として使うには、次のように一旦RGBに変換する必要があります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Converter : MonoBehaviour {

	public Slider H, S, V;

	void Update () {
		GetComponent<Renderer> ().material.color = 
			UnityEngine.Color.HSVToRGB (H.value, S.value, V.value);
	}
}

実行結果は次のような感じになります。HSVそれぞれのスライダーを調整することで立方体の色が変わります。

f:id:nn_hokuson:20170412193626g:plain

RGBからHSVの変換は「足して3で割る」みたいに簡単な処理ではありません。それなりに時間がかかるので、画像処理のような全ピクセルに対して処理する場合には注意が必要です。

興味のある方は次の記事を参考にしてください。
www.peko-step.com