以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/25/234632より取得しました。


UnityのスクリプトからHSV(色彩、彩度、明度)でカラーを設定する

本日は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の値を変更するとオブジェクトの色が変化します。





以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/25/234632より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14