【Unity】HDRPのライトの強さをスクリプトで変える

投稿者: | 2021-03-07

HDRPのライトの強さをスクリプトで変更してみました。

HDRPのライトの単位は、タイプによって様々です。例えばポイントライトには4つの単位があります。

インスペクタで600ルーメンに設定して、スクリプトでIntensityを調べると、値が変わりました。

[SerializeField] Light[] lights;

// Start is called before the first frame update
void Start()
{
    // 強さを表示
    for(int i = 0;i < lights.Length; i++)
    {
        Debug.Log(lights[i].type + " " + lights[i].intensity);
    }

}

ポイントライトではカンデラの単位に変わるようです。

スポットライトも、ポイントライトと同様に、ルーメンから照射角360度でのカンデラに変わりました。

エリアライトはNits、ディレクショナルライトはLuxです。

エリアライトのタイプはスクリプトではなぜかPointになりました。

スクリプトではこれらの単位を使ってライトの強さを変更できました。

using UnityEngine;

public class ChangeLightIntensity : MonoBehaviour
{

    [SerializeField] Light[] lights;

    // Start is called before the first frame update
    void Start()
    {
        // 強さを表示
        for(int i = 0;i < lights.Length; i++)
        {
            Debug.Log(lights[i].type + " " + lights[i].intensity);
        }

    }

    // Update is called once per frame
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.E))
        {
            // 強さを変える
            SetLightIntensity();

            // 強さを表示
            for (int i = 0; i < lights.Length; i++)
            {
                Debug.Log(lights[i].type + " " + lights[i].intensity);
            }
        }
    }

    // 強さを変える
    void SetLightIntensity()
    {
        for (int i = 0; i < lights.Length; i++)
        {
            if(lights[i].type == LightType.Directional)
            {
                lights[i].intensity = 1f;
            }
            else if(lights[i].type == LightType.Area) 
            {
                lights[i].intensity = 5000f;

            }
            else
            {
                lights[i].intensity = 79.58f;
            }
            
        }
    }
}

インスペクタの値は変わりませんが、スクリプトで見ると変わっています。エリアライトのタイプはやはりうまく判定できませんでした。

狙った明るさにしたいときは、明るさの単位の換算ができるサイトが便利です。

コメントを残す

メールアドレスが公開されることはありません。