【Unity】HDRPのカスタムポストプロセスのパラメーターをスクリプトで変更する

投稿者: | 2021-03-17

HDRPでカスタムポストプロセスを使うで追加したエフェクトのパラメーターをスクリプトで変えてみました。

自分で作ったVolumeコンポーネントもTryGetメソッドの引数にoutキーワードを前置きして取得できます。

  1. using UnityEngine;
  2. using UnityEngine.Rendering;
  3.  
  4. public class ChangeVolumeParameter : MonoBehaviour
  5. {
  6. [SerializeField] Volume volume;
  7. NewPostProcessVolume postProcessVolume;
  8.  
  9. void Awake()
  10. {
  11. // NewPostProcessVolumeを取得
  12. volume.profile.TryGet(out postProcessVolume);
  13. }
  14.  
  15. // エフェクトの強さを変える
  16. public void EnableEffect()
  17. {
  18. if(postProcessVolume.intensity.value >= 1f)
  19. {
  20. postProcessVolume.intensity.value = 0f;
  21. }
  22. else
  23. {
  24. postProcessVolume.intensity.value = 1f;
  25. }
  26. }
  27.  
  28. public void EnableEffect(bool enabled)
  29. {
  30. postProcessVolume.enabled.value = enabled;
  31. }
  32.  
  33.  
  34. }

このカスタムボリュームコンポーネントでは、デフォルトでintensityというフィールドが宣言されていました。

  1. using UnityEngine;
  2. using UnityEngine.Rendering;
  3. using UnityEngine.Rendering.HighDefinition;
  4. using System;
  5.  
  6. [Serializable, VolumeComponentMenu("Post-processing/Custom/New Post Process Volume")]
  7. public sealed class NewPostProcessVolume : CustomPostProcessVolumeComponent, IPostProcessComponent
  8. {
  9. [Tooltip("Controls the intensity of the effect.")]
  10. public ClampedFloatParameter intensity = new ClampedFloatParameter(0f, 0f, 1f);
  11.  
  12. public BoolParameter enabled = new BoolParameter(true);
  13.  
  14. Material m_Material;
  15. // ...

型はfloatではなく、ClampedFloatParameterです。float型の値はvalueフィールドに入っています。

  1. postProcessVolume.intensity.value = 1f;

BoolParameter型の変数を宣言するとbool型も使えます。publicキーワードや[SerializeField]属性を付けると、インスペクタに表示されます。

Volumeのゲームオブジェクトをスクリプトにアタッチして、ボタンを押したときにintensityを変えるメソッドを呼ぶとエフェクトを切り替えられました。

コメントを残す

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