in unity/Assets/PostProcessingV2/Editor/PostProcessEffectBaseEditor.cs [95:181]
protected void PropertyField(SerializedParameterOverride property, GUIContent title)
{
// Check for DisplayNameAttribute first
var displayNameAttr = property.GetAttribute<DisplayNameAttribute>();
if (displayNameAttr != null)
title.text = displayNameAttr.displayName;
// Add tooltip if it's missing and an attribute is available
if (string.IsNullOrEmpty(title.tooltip))
{
var tooltipAttr = property.GetAttribute<TooltipAttribute>();
if (tooltipAttr != null)
title.tooltip = tooltipAttr.tooltip;
}
// Look for a compatible attribute decorator
AttributeDecorator decorator = null;
Attribute attribute = null;
foreach (var attr in property.attributes)
{
// Use the first decorator we found
if (decorator == null)
{
decorator = EditorUtilities.GetDecorator(attr.GetType());
attribute = attr;
}
// Draw unity built-in Decorators (Space, Header)
if (attr is PropertyAttribute)
{
if (attr is SpaceAttribute)
{
EditorGUILayout.GetControlRect(false, (attr as SpaceAttribute).height);
}
else if (attr is HeaderAttribute)
{
var rect = EditorGUILayout.GetControlRect(false, 24f);
rect.y += 8f;
rect = EditorGUI.IndentedRect(rect);
EditorGUI.LabelField(rect, (attr as HeaderAttribute).header, Styling.labelHeader);
}
}
}
bool invalidProp = false;
if (decorator != null && !decorator.IsAutoProperty())
{
if (decorator.OnGUI(property.value, property.overrideState, title, attribute))
return;
// Attribute is invalid for the specified property; use default unity field instead
invalidProp = true;
}
using (new EditorGUILayout.HorizontalScope())
{
// Override checkbox
var overrideRect = GUILayoutUtility.GetRect(17f, 17f, GUILayout.ExpandWidth(false));
overrideRect.yMin += 4f;
EditorUtilities.DrawOverrideCheckbox(overrideRect, property.overrideState);
// Property
using (new EditorGUI.DisabledScope(!property.overrideState.boolValue))
{
if (decorator != null && !invalidProp)
{
if (decorator.OnGUI(property.value, property.overrideState, title, attribute))
return;
}
// Default unity field
if (property.value.hasVisibleChildren
&& property.value.propertyType != SerializedPropertyType.Vector2
&& property.value.propertyType != SerializedPropertyType.Vector3)
{
GUILayout.Space(12f);
EditorGUILayout.PropertyField(property.value, title, true);
}
else
{
EditorGUILayout.PropertyField(property.value, title);
}
}
}
}