CustomVolumeParameterとインスペクターのエディタ拡張(Volume Component)
CustomVolumeParameter
VolumeComponentで利用できるVolumeParameterは予め用意されているものがあります。しかし、enumのように既存のVolumeParameter以外のParameterを利用したい場合があります。この場合、VolumeParameterを継承したクラスを作成し、新たにVolumeParameterを作成する必要があります。
Script
以下はenumのVolumeParameterを追加するためのScriptです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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が変更されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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
コメントを書く