本日はUnityの小ネタ枠です。
UnityのスクリプトからHSV(色彩、彩度、明度)でカラーを設定する方法についてです。
スクリプトからHSV(色彩、彩度、明度)でカラーを設定する
Color.HSVToRGBメソッドはHSV(色彩、彩度、明度)の値からColorクラスの値を返します。
HSVの値はそれぞれ0.0~1.0の範囲で設定します。
docs.unity3d.com
返り値がColorなので以下のようにマテリアルに出力結果を直接設定することもできます。
var hue = 0.0f; var saturation = 0.0f; var value = 0.0f; var renderer = GetComponent<Renderer>(); renderer.material.color = Color.HSVToRGB(m_Hue, m_Saturation, m_Value);
逆にColorからHSVの値を取得したい場合はColor.RGBToHSVメソッドを利用します。
docs.unity3d.com
float H, S, V; Color.RGBToHSV(new Color(0.9f, 0.7f, 0.1f, 1.0F), out H, out S, out V); Debug.Log("H: " + H + " S: " + S + " V: " + V);
サンプルスクリプト
Inspectorで設定したHSVの値を基にオブジェクトのカラーを変更する以下のサンプルスクリプトを作成しました。
using UnityEngine; public class ColorFromHSV : MonoBehaviour { [SerializeField, Range(0.0f, 1.0f)] private float h = 1.0f; [SerializeField, Range(0.0f, 1.0f)] private float s = 1.0f; [SerializeField, Range(0.0f, 1.0f)] private float v = 1.0f; [SerializeField] private Renderer renderer = default; private void Reset() { // Rendererを取得する renderer = GetComponent<Renderer>(); } // Inspectorの値を変更したときに呼ばれる private void OnValidate() { // HSVからカラーを作成して設定する renderer.material.color = Color.HSVToRGB(h, s, v); // 作成されたカラーからHSVを逆算する float resultH, resultS, resultV; Color.RGBToHSV(renderer.material.color, out resultH, out resultS, out resultV); // デバッグログに現在のカラーの情報をHSV(0~100)で表示する Debug.Log($"H: {resultH * 100f}, S: {resultS * 100f}, V: {resultV * 100f}"); } }

InspectorからHSVの値を変更するとオブジェクトの色が変化します。


