【Unity】2019.3 URPでスクリプトからPostProcessingにアクセスする

初めに

Unity2019.2(LWRP)とUnity2019.3(URP)では使用しているPostProcessingが別物みたいです

参考URL

qiita.com

そのためスクリプトからポストエフェクトをいじる方法も少し変更されているので それを紹介していきます。

環境

Unity 2019.3.0f3

Universal Render Pipeline(テンプレートのプロジェクトです)

エフェクトの追加

エフェクトの追加はprofile.Add<追加したいエフェクトの型>(true)でできます。

ただしすでに追加されてる場合はさらに追加することはできません。

using UnityEngine;
using UnityEngine.Rendering;//必要
using UnityEngine.Rendering.Universal//必要;
public class EffectTest : MonoBehaviour
{
    [SerializeField]
    Volume m_Volume;
    void Update()
    {
        //ポストエフェクト追加
        if (Input.GetKeyDown(KeyCode.X))
        {
            ChromaticAberration w = m_Volume.profile.Add<ChromaticAberration>(true);
            w.intensity.value = 100;//追加して値を変更
        }
    }
}

実行してXキーを押したらこんな感じにエフェクトが追加される。

f:id:Brave345:20200306120255p:plain

エフェクトの変更

すでにあるエフェクトはprofile.TryGet(out 取得したいエフェクトの型の変数)で取得できます。

あと取得したものプロパティを変更してあげるだけ

using UnityEngine;
using UnityEngine.Rendering;//必要
using UnityEngine.Rendering.Universal//必要;
public class EffectTest : MonoBehaviour
{
    [SerializeField]
    Volume m_Volume;

    void Update()
    {
        //ポストエフェクト変更
        if (Input.GetKeyDown(KeyCode.Z))
        {
            Bloom c;
            m_Volume.profile.TryGet(out c);
            c.intensity.value = 10;
        }
    }
}

削除

削除はprofile.Remove<消したいエフェクトの型>()で削除できる。

using UnityEngine;
using UnityEngine.Rendering;//必要
using UnityEngine.Rendering.Universal//必要;
public class EffectTest : MonoBehaviour
{
    [SerializeField]
    Volume m_Volume;
    void Update()
    {
        //ポストエフェクト削除
        if (Input.GetKeyDown(KeyCode.Z))
        {
            m_Volume.Profile.Remove<Bloom>();
        }
    }
}