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

投稿者: | 2021-03-17

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

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

using UnityEngine;
using UnityEngine.Rendering;

public class ChangeVolumeParameter : MonoBehaviour
{
    [SerializeField] Volume volume;
    NewPostProcessVolume postProcessVolume;

    void Awake()
    {
        // NewPostProcessVolumeを取得
        volume.profile.TryGet(out postProcessVolume);
    }

    // エフェクトの強さを変える
    public void EnableEffect()
    {
        if(postProcessVolume.intensity.value >= 1f)
        {
            postProcessVolume.intensity.value = 0f;
        }
        else
        {
            postProcessVolume.intensity.value = 1f;         
        }
    }

    public void EnableEffect(bool enabled)
    {
        postProcessVolume.enabled.value = enabled;
    }


}

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

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using System;

[Serializable, VolumeComponentMenu("Post-processing/Custom/New Post Process Volume")]
public sealed class NewPostProcessVolume : CustomPostProcessVolumeComponent, IPostProcessComponent
{
    [Tooltip("Controls the intensity of the effect.")]
    public ClampedFloatParameter intensity = new ClampedFloatParameter(0f, 0f, 1f);

    public BoolParameter enabled = new BoolParameter(true);

    Material m_Material;
    // ...

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

postProcessVolume.intensity.value = 1f;

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

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

コメントを残す

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