public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            EditorGUI.BeginProperty(position, label, property);

            Rect rectFoldout = new Rect(position.min.x, position.min.y, position.size.x, EditorGUIUtility.singleLineHeight);

            property.isExpanded = EditorGUI.Foldout(rectFoldout, property.isExpanded, label);

            position.height = EditorGUIUtility.singleLineHeight;

            if (property.isExpanded)
            {
                position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;

                SerializedProperty name = property.FindPropertyRelative("m_name");
                EditorGUI.PropertyField(position, name);

                position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;

                SerializedProperty type = property.FindPropertyRelative("m_parameterType");
                EditorGUI.PropertyField(position, type);

                position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;

                ReplacementShaderSetupScriptableObject.ParameterType parameterType = (ReplacementShaderSetupScriptableObject.ParameterType)type.enumValueIndex;
                SerializedProperty p = property.FindPropertyRelative(parameterType.ToString());

                position.height = EditorGUI.GetPropertyHeight(p, includeChildren: true);
                EditorGUI.PropertyField(position, p, includeChildren: true);
            }

            EditorGUI.EndProperty();
        }
        public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
        {
            var spacing = EditorGUIUtility.standardVerticalSpacing;
            var height  = EditorGUIUtility.singleLineHeight + spacing;

            if (property.isExpanded)
            {
                height += (EditorGUIUtility.singleLineHeight + spacing) * 2;

                SerializedProperty type = property.FindPropertyRelative("m_parameterType");
                ReplacementShaderSetupScriptableObject.ParameterType parameterType = (ReplacementShaderSetupScriptableObject.ParameterType)type.enumValueIndex;

                height += EditorGUI.GetPropertyHeight(property.FindPropertyRelative(parameterType.ToString()), true);
            }

            return(height);
        }