水無川旅館 2024/07/15 06:52

【Unity】ポストプロセスの設定を実行時に変更する方法

 こんにちは! 今日は Unity 技術記事を書いてみたいと思います。

 今回のお題はポストプロセスの設定を実行時に変更することです!

 今回の環境は

 前提です!

ポストプロセスって?

 まず大前提として、ポストプロセスというのは以下のように、画作りの最終工程で見映えを良くするシステムです。

ポストプロセスあり

ポストプロセスなし

 ポストプロセスなしというのも、これはこれでありな気がしてきたな((

 とはいえ基本的には、ありのほうがモダンな感じになると思います。

ポストプロセスのエフェクトはどう定義されているの?

 PostProcessing Stack v2 では、 PostProcessEffectSettings というクラスを継承して、エフェクトは作られています。

 もしエフェクトを自作したい場合、このクラスを継承すればOKです!

エフェクトをスクリプトから取得するには?

 このエフェクトをスクリプトから取得するには、 PostProcessProfile クラスの GetSetting または TryGetSettings メソッドを使います。

 また、 PostProcessProfile のインスタンスは、 PostProcessVolume クラスの profile プロパティから取得することができます。

 そして、 PostProcessVolume クラスのインスタンスは、おなじみ GameObjectMonoBehaviourGetComponent 関数を使えば取得できます!

 そこで、仮に PostProcessEffectSettings を継承したエフェクトのクラスを T とすると、以下の形式で設定を変更することができます!

using UnityEngine.Rendering.PostProcessing;

var volume = GetComponent<PostProcessVolume>();
var effect = volume.profile.GetSetting<T>();

// FloatParameter なので .value が必要
// effect.foo.value = 0.5f;

(注意:パラメタは FloatParameter 等で定義されていることが多いです!)

つまり…どういうことだってばよ?

 仮に Unity 標準の Vignette の Intensity を変更したいとすると、以下のようにすればいいのです!

using UnityEngine.Rendering.PostProcessing;

var volume = GetComponent<PostProcessVolume>();
var vignette = volume.profile.GetSetting<Vignette>();

// FloatParameter なので .value が必要
// vignette.intensity.value = 0.5f;

 注意点としては、予め Vignette の intensity のチェックマークをつけておく必要がある、というものがあります。これをつけないと、数値を変更しても反映されません。


↑!!intensity にチェックしておく!!

他のエフェクトのサンプルコードもほしいんですけどーー!!

 さすがにそこまで列挙するのは無理です(w

 他のエフェクトの場合、Unity 標準のエフェクトなら、PostProcessEffectEffectSettings のドキュメント を読んで、必要なクラスやプロパティを見つけます。

 アセットの場合、ドキュメントやコードがついていることが多いと思いますので、そのドキュメントやコードを読みながらって感じです。

 どっちもなかったら……。さすがにそんなことはないと思いたいですねw

 このあたりは、各々アセットごとに対応するしかなさそうです。

DOTween との合わせ技も可能!

 実際には、ポストプロセスをアニメーションさせたいことも多いんじゃないかと思います。 DOTween との併用ももちろん可能です!

 そういうのを駆使すると、このような表現ができるようになります。

おまけ:DOTweenで設定変更するサンプルコード RPGのエンカウント風表現

 フォロワー限定で、 DOTween でポストプロセスの設定を変更するサンプルコードを公開したいと思います…!

 参考にするもよし、そのまま使うもよしです。そのまま使っても、下記のように、RPGで敵にエンカウントした時のような「ズーム」する感じの表現ができます。


↑車の横あたりにエンカウント判定があります

特典コードの利用規約

 特典コードは Mozilla Public License, version 2.0 (MPL 2.0) で提供されています。 MPL 2.0 の日本語参考訳もあります。

 なお、著作権は放棄していません。MPL 2.0 というライセンスで提供します。使用する場合は、クレジット表記・ライセンス表記はお願い致します。

 また無保証です(OSSでよくある条件です)。このコードを使うことで起きたいかなる事態にも責任は負いかねますので、ご了承ください。

フォロワー以上限定無料

無料プラン限定特典を受け取ることができます

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索