using UnityEngine.PostProcessing; namespace UnityEditor.PostProcessing { using Mode = BuiltinDebugViewsModel.Mode; using Settings = BuiltinDebugViewsModel.Settings; [PostProcessingModelEditor(typeof(BuiltinDebugViewsModel), alwaysEnabled: true)] public class BuiltinDebugViewsEditor : PostProcessingModelEditor { struct DepthSettings { public SerializedProperty scale; } struct MotionVectorsSettings { public SerializedProperty sourceOpacity; public SerializedProperty motionImageOpacity; public SerializedProperty motionImageAmplitude; public SerializedProperty motionVectorsOpacity; public SerializedProperty motionVectorsResolution; public SerializedProperty motionVectorsAmplitude; } SerializedProperty m_Mode; DepthSettings m_Depth; MotionVectorsSettings m_MotionVectors; public override void OnEnable() { m_Mode = FindSetting((Settings x) => x.mode); m_Depth = new DepthSettings { scale = FindSetting((Settings x) => x.depth.scale) }; m_MotionVectors = new MotionVectorsSettings { sourceOpacity = FindSetting((Settings x) => x.motionVectors.sourceOpacity), motionImageOpacity = FindSetting((Settings x) => x.motionVectors.motionImageOpacity), motionImageAmplitude = FindSetting((Settings x) => x.motionVectors.motionImageAmplitude), motionVectorsOpacity = FindSetting((Settings x) => x.motionVectors.motionVectorsOpacity), motionVectorsResolution = FindSetting((Settings x) => x.motionVectors.motionVectorsResolution), motionVectorsAmplitude = FindSetting((Settings x) => x.motionVectors.motionVectorsAmplitude), }; } public override void OnInspectorGUI() { EditorGUILayout.PropertyField(m_Mode); int mode = m_Mode.intValue; if (mode == (int)Mode.Depth) { EditorGUILayout.PropertyField(m_Depth.scale); } else if (mode == (int)Mode.MotionVectors) { EditorGUILayout.HelpBox("Switch to play mode to see motion vectors.", MessageType.Info); EditorGUILayout.LabelField("Source Image", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(m_MotionVectors.sourceOpacity, EditorGUIHelper.GetContent("Opacity")); EditorGUI.indentLevel--; EditorGUILayout.Space(); EditorGUILayout.LabelField("Motion Vectors (overlay)", EditorStyles.boldLabel); EditorGUI.indentLevel++; if (m_MotionVectors.motionImageOpacity.floatValue > 0f) EditorGUILayout.HelpBox("Please keep opacity to 0 if you're subject to motion sickness.", MessageType.Warning); EditorGUILayout.PropertyField(m_MotionVectors.motionImageOpacity, EditorGUIHelper.GetContent("Opacity")); EditorGUILayout.PropertyField(m_MotionVectors.motionImageAmplitude, EditorGUIHelper.GetContent("Amplitude")); EditorGUI.indentLevel--; EditorGUILayout.Space(); EditorGUILayout.LabelField("Motion Vectors (arrows)", EditorStyles.boldLabel); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(m_MotionVectors.motionVectorsOpacity, EditorGUIHelper.GetContent("Opacity")); EditorGUILayout.PropertyField(m_MotionVectors.motionVectorsResolution, EditorGUIHelper.GetContent("Resolution")); EditorGUILayout.PropertyField(m_MotionVectors.motionVectorsAmplitude, EditorGUIHelper.GetContent("Amplitude")); EditorGUI.indentLevel--; } else { CheckActiveEffect(mode == (int)Mode.AmbientOcclusion && !profile.ambientOcclusion.enabled, "Ambient Occlusion"); CheckActiveEffect(mode == (int)Mode.FocusPlane && !profile.depthOfField.enabled, "Depth Of Field"); CheckActiveEffect(mode == (int)Mode.EyeAdaptation && !profile.eyeAdaptation.enabled, "Eye Adaptation"); CheckActiveEffect((mode == (int)Mode.LogLut || mode == (int)Mode.PreGradingLog) && !profile.colorGrading.enabled, "Color Grading"); CheckActiveEffect(mode == (int)Mode.UserLut && !profile.userLut.enabled, "User Lut"); } } void CheckActiveEffect(bool expr, string name) { if (expr) EditorGUILayout.HelpBox(string.Format("{0} isn't enabled, the debug view won't work.", name), MessageType.Warning); } } }