CustomVolumeParameterとインスペクターのエディタ拡張(Volume Component)
CustomVolumeParameter
VolumeComponentで利用できるVolumeParameterは予め用意されているものがあります。しかし、enumのように既存のVolumeParameter以外のParameterを利用したい場合があります。この場合、VolumeParameterを継承したクラスを作成し、新たにVolumeParameterを作成する必要があります。
Script
以下はenumのVolumeParameterを追加するためのScriptです。
using UnityEngine.Rendering;
using System;
namespace Karakan
{
public enum Select
{
A = 0,
B = 1
}
[Serializable]
public class BlendingParameter : VolumeParameter<Select>
{
public BlendingParameter(Select value, bool overrideState = false) : base(value, overrideState) { }
}
}
このVolumeParameterを使用すると、以下のようにVolumeComponentでenumが利用できます。

インスペクターのエディタ拡張(Volume Component)
通常、インスペクターのカスタムを行う際にはEditorを継承したクラスを利用します。しかし、VolumeComponentの場合はEditorではなくVolumeComponentEditorを継承したクラスを作成する必要があります。
Script
VolumeComponentEditorを利用して、VolumeComponentのインスペクターをカスタムするScriptです。以下のScriptではenumの値によって表示するLabelが変更されます。
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
using UnityEditor;
using UnityEditor.Rendering;
namespace Karakan
{
public class CustomVolumeComponent : VolumeComponent, IPostProcessComponent
{
public CustomeVolumeParameter customParameter = new CustomeVolumeParameter(Select.A, true);
public bool IsActive()
{
return true;
}
public bool IsTileCompatible()
{
return false;
}
}
[VolumeComponentEditor(typeof(CustomVolumeComponent))]
public class CustomVolumeInspector : VolumeComponentEditor
{
CustomVolumeComponent _volume = null;
SerializedDataParameter _custom_parameter;
public override void OnEnable()
{
base.OnEnable();
_volume = target as CustomVolumeComponent; //VolumeComponentの取得
//SerializedDataParameterの取得
var o = new PropertyFetcher<CustomVolumeComponent>(serializedObject);
_custom_parameter = Unpack(o.Find(x => x.customParameter));
}
public override void OnInspectorGUI()
{
PropertyField(_custom_parameter); //CustomeVolumeParameterの表示
Select select = _volume.customParameter.value; //CustomeVolumeParameterの値を取得
//CustomeVolumeParameterの値によってLabelを変更
switch (select)
{
case Select.A:
EditorGUILayout.LabelField("A is selected.");
break;
case (Select.B):
EditorGUILayout.LabelField("B is selected.");
break;
}
}
}
}
上記Scriptを使用した結果は以下の通りです。enumの選択によってラベルの変更ができています。

参考ページ
Unity:Scripting API/UnityEngine.Rendering/VolumeParameter<T>
Unity:Scripting API/UnityEditor.Rendering/VolumeComponentEditor
-
前の記事
RendererFeatureでMRT(Multiple Render Target) 2022.03.06
-
次の記事
4点を通る三次ベジェ曲線 2023.04.30
コメントを書く