/// Credit setchi (https://github.com/setchi) /// Sourced from - https://github.com/setchi/FancyScrollView // For maintenance, every new [SerializeField] variable in ScrollPositionController must be declared here using UnityEditor; namespace UnityEngine.UI.Extensions { [CustomEditor(typeof(ScrollPositionController))] [CanEditMultipleObjects] public class ScrollPositionControllerEditor : Editor { SerializedProperty viewport; SerializedProperty directionOfRecognize; SerializedProperty movementType; SerializedProperty elasticity; SerializedProperty scrollSensitivity; SerializedProperty inertia; SerializedProperty decelerationRate; SerializedProperty snap; SerializedProperty snapEnable; SerializedProperty snapVelocityThreshold; SerializedProperty snapDuration; SerializedProperty dataCount; void OnEnable() { viewport = serializedObject.FindProperty("viewport"); directionOfRecognize = serializedObject.FindProperty("directionOfRecognize"); movementType = serializedObject.FindProperty("movementType"); elasticity = serializedObject.FindProperty("elasticity"); scrollSensitivity = serializedObject.FindProperty("scrollSensitivity"); inertia = serializedObject.FindProperty("inertia"); decelerationRate = serializedObject.FindProperty("decelerationRate"); snap = serializedObject.FindProperty("snap"); snapEnable = serializedObject.FindProperty("snap.Enable"); snapVelocityThreshold = serializedObject.FindProperty("snap.VelocityThreshold"); snapDuration = serializedObject.FindProperty("snap.Duration"); dataCount = serializedObject.FindProperty("dataCount"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(viewport); EditorGUILayout.PropertyField(directionOfRecognize); EditorGUILayout.PropertyField(movementType); EditorGUILayout.PropertyField(elasticity); EditorGUILayout.PropertyField(scrollSensitivity); EditorGUILayout.PropertyField(inertia); DrawInertiaRelatedValues(); EditorGUILayout.PropertyField(dataCount); serializedObject.ApplyModifiedProperties(); } void DrawInertiaRelatedValues() { if (inertia.boolValue) { EditorGUILayout.PropertyField(decelerationRate); EditorGUILayout.PropertyField(snap); using (new EditorGUI.IndentLevelScope()) { DrawSnapRelatedValues(); } } } void DrawSnapRelatedValues() { if (snap.isExpanded) { EditorGUILayout.PropertyField(snapEnable); if (snapEnable.boolValue) { EditorGUILayout.PropertyField(snapVelocityThreshold); EditorGUILayout.PropertyField(snapDuration); } } } } }