Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Unity Post Processingの各パラメータをスクリプトから操作する方法について[ URP ポスト・エフェクト ]

PostFXscriptingTest_Cover

 Unityでの画作りに欠かせない存在となっているポスト・エフェクトをC#スクリプトから操作する方法について簡単にまとめます。なおユニバーサル・レンダーパイプラインでの実践となるので、ご了承ください。

PostFXscriptingTest_Hierarchy

 シーンにGlobal Volumeを作成、Post Processing Profileを設定し、そこに各プロセッサーを加えることで、最終的なレンダリング画面に対して様々な視覚エフェクトを加えることが出来ます。

PostFXscriptingTest_PostFXinspector

 今回はスクリーンの四隅に陰影を与える、Vignette(ヴィネットのIntensityをスクリプト、及びUIのスライダーで操作してみたいと思います。

 

PostFXscriptingTest_Controller

 空のゲームオブジェクトを追加し、今回書いたスクリプトを装着します。Serialize FieldとしてVolumeクラスの変数を宣言し、インスペクター上で目標となるVolumeを代入します。

PostFXscriptingTest_Script

 スクリプト自体はたったこれだけです。注意としては、まずusing文にUnityEngine.RenderingUnityEngine.Rendering.Universalを追加します。

PostFXscriptingTest_usingStatement

 それぞれVolumeクラスとVignetteなど各プロセッサークラスを利用するために必要です。

 各ポストエフェクト・プロセッサーコンポーネントではないようで、GetComponentは使いません。各エフェクトの構成情報を持つprofile変数のTryGetメソッドで各プロセッサーの取得を図ります。

 

 各パラメータのvalueフィールドに値を代入することで、パラメータを変更することが出来ます。この場合、vignette.intensity.value = 1.0fというような形になります。

 

PostFXscriptngTest_SliderInspector

 今回はUIのスライダーでランタイム中に効果を変化させたいので、ChangeVignetteIntensityというパブリック関数を用意して、スライダーのイベント関数に登録しています。

 VignetteのIntensityは0.0-1.0までの値なので、今回はそのままでいいですが、パラメータによってはスライダーのmin valueとmax valueを変更する必要があるものもあります。

 

というわけで、これが・・・

PostFXscriptingTest_NoVignette

こうなります!

PostFXscriptingTest_VignetteEffect

 

 これを上手く使えば、ダメージを受けた時に視界がぼやけるなどのゲームへの没入感を高める視覚効果を作れるので、上手く活用していきたいと思います。