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

投稿者: | 2021-03-07

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

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

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

  1. [SerializeField] Light[] lights;
  2.  
  3. // Start is called before the first frame update
  4. void Start()
  5. {
  6. // 強さを表示
  7. for(int i = 0;i < lights.Length; i++)
  8. {
  9. Debug.Log(lights[i].type + " " + lights[i].intensity);
  10. }
  11.  
  12. }

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

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

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

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

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

  1. using UnityEngine;
  2.  
  3. public class ChangeLightIntensity : MonoBehaviour
  4. {
  5.  
  6. [SerializeField] Light[] lights;
  7.  
  8. // Start is called before the first frame update
  9. void Start()
  10. {
  11. // 強さを表示
  12. for(int i = 0;i < lights.Length; i++)
  13. {
  14. Debug.Log(lights[i].type + " " + lights[i].intensity);
  15. }
  16.  
  17. }
  18.  
  19. // Update is called once per frame
  20. void Update()
  21. {
  22. if(Input.GetKeyDown(KeyCode.E))
  23. {
  24. // 強さを変える
  25. SetLightIntensity();
  26.  
  27. // 強さを表示
  28. for (int i = 0; i < lights.Length; i++)
  29. {
  30. Debug.Log(lights[i].type + " " + lights[i].intensity);
  31. }
  32. }
  33. }
  34.  
  35. // 強さを変える
  36. void SetLightIntensity()
  37. {
  38. for (int i = 0; i < lights.Length; i++)
  39. {
  40. if(lights[i].type == LightType.Directional)
  41. {
  42. lights[i].intensity = 1f;
  43. }
  44. else if(lights[i].type == LightType.Area)
  45. {
  46. lights[i].intensity = 5000f;
  47.  
  48. }
  49. else
  50. {
  51. lights[i].intensity = 79.58f;
  52. }
  53. }
  54. }
  55. }

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

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

コメントを残す

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