(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


Post Processing Stackの設定値をプログラムから変更する方法【Unity】【ポストプロセス】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2020.3.25f1


はじめに

Unity公式からポストプロセスを使って見栄えを簡単かつ劇的に変える事が出来る

Post Processing Stack(Version 2.x)というものが提供されていますが、

f:id:kan_kikuchi:20200207105136g:plain


今回はこのPost Processing Stackの設定値をプログラムから変更してみようという感じの記事。

(導入については上記記事を参考の事。)

f:id:kan_kikuchi:20220321082816g:plain


なお、記事中では以下のアセットを使っています。

Village Environment Pack | 3D Historic | Unity Asset Store



Post Processing Stackの値をプログラムから変更する方法

早速ですがPost Processing Stackの値をプログラムから変更するには

PostProcessVolumeのprofileからBloom等の変更したい対象を取得し、

その設定を書き換える感じになります。

//PostProcessVolume等を使うのに必要
using UnityEngine.Rendering.PostProcessing;
//PostProcessVolumeを取得
var postProcessVolume = GetComponent<PostProcessVolume>();

//PostProcessVolumeのprofileからBloomの設定を取得
var bloom = postProcessVolume.profile.GetSetting<Bloom>();

//Bloomの明るさを変更
bloom.intensity.value = 0.5f;
f:id:kan_kikuchi:20220321083156p:plain


例えば変数の値に合わせて明るさを自動更新しようとすると以下のような感じに。

//値をプログラムから変更する対象
[SerializeField]
private PostProcessVolume _postProcessVolume = default;
  
//Bloomに設定する明るさ
[SerializeField]
private float _intensity = 0;

//=================================================================================
//更新
//=================================================================================

//値(_intensity)が変更されたら実行される
private void OnValidate() {
  //設定されたら明るさの値を反映
  var bloom = _postProcessVolume.profile.GetSetting<Bloom>();
  bloom.intensity.value = _intensity;
}
f:id:kan_kikuchi:20220321082816g:plain