DefaultPostProcessEffectEditor.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using UnityEngine.Rendering.PostProcessing;
  6. namespace UnityEditor.Rendering.PostProcessing
  7. {
  8. /// <summary>
  9. /// A default effect editor that gathers all parameters and list them vertically in the
  10. /// inspector.
  11. /// </summary>
  12. public class DefaultPostProcessEffectEditor : PostProcessEffectBaseEditor
  13. {
  14. List<SerializedParameterOverride> m_Parameters;
  15. /// <inheritdoc />
  16. public override void OnEnable()
  17. {
  18. m_Parameters = new List<SerializedParameterOverride>();
  19. var fields = target.GetType()
  20. .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
  21. .Where(t => t.FieldType.IsSubclassOf(typeof(ParameterOverride)) && t.Name != "enabled")
  22. .Where(t =>
  23. (t.IsPublic && t.GetCustomAttributes(typeof(NonSerializedAttribute), false).Length == 0)
  24. || (t.GetCustomAttributes(typeof(UnityEngine.SerializeField), false).Length > 0)
  25. )
  26. .ToList();
  27. foreach (var field in fields)
  28. {
  29. var property = serializedObject.FindProperty(field.Name);
  30. var attributes = field.GetCustomAttributes(false).Cast<Attribute>().ToArray();
  31. var parameter = new SerializedParameterOverride(property, attributes);
  32. m_Parameters.Add(parameter);
  33. }
  34. }
  35. /// <inheritdoc />
  36. public override void OnInspectorGUI()
  37. {
  38. foreach (var parameter in m_Parameters)
  39. PropertyField(parameter);
  40. }
  41. }
  42. }