いんでぃーづ

ゲームメインのブレブレブログ。ゲーム,Unity,デザイン,UI/UX

Post Processing Stack V2の効果をスクリプトから動的に変更する

{スポンサーリンク}

GitHubの公式リポジトリにやり方書いてあったので試した。

Manipulating the Stack · Unity-Technologies/PostProcessing Wiki · GitHub

すでにPostProcess設定済みの前提での解説す。

操作に必要なクラス

PostProcessingStackV2 のクラス定義はここにまとまっている

Namespace UnityEngine.Rendering.PostProcessing | Package Manager UI website

各PostProcess効果ごとに定義されているクラス

DepthOfFieldBloom など、そのものズバリな名称になっています。
スクリプトから設定値を上書きする際に、それぞれのクラスを使います。

・DepthOfField
Class DepthOfField | Package Manager UI website

・Bloom
Class Bloom | Package Manager UI website

PostProcessManager

効果を上書きするために必要なクラスです。
QuickVolume メソッドに前述のPostProcess効果ごとのクラスのインスタンスを渡し、値を上書きします。

Class PostProcessManager | Package Manager UI website

サンプルコード

シーン開始後1秒後にDepthOfFieldの値を変更するスクリプトです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class PostProcessManipulator : MonoBehaviour
{

    // Post Process Volume がついているGameObject
    [SerializeField]
    GameObject postProcessGameObject;

    void Start()
    {
        Invoke("FixDOF", 1f);
    }

    void FixDOF() {
      var dof = ScriptableObject.CreateInstance<DepthOfField>();
      dof.focusDistance.Override(4);
      PostProcessManager.instance.QuickVolume(postProcessGameObject.layer, 1, dof);
    }
}

結果

f:id:sugar_affordance:20190306123815g:plain

イジョ!

・使ったモデル


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。