| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /// Credit Ben MacKinnon @Dover8
- /// Sourced from - https://github.com/Dover8/Unity-UI-Extensions/tree/range-slider
- /// Usage: Extension of the standard slider. Two handles determine a low and high value between a Min and Max.
- /// Raises a UnityEvent passing the low and high values
- using UnityEditor;
- using UnityEditor.UI;
- namespace UnityEngine.UI.Extensions
- {
- [CustomEditor(typeof(RangeSlider), true)]
- [CanEditMultipleObjects]
- public class RangeSliderEditor : SelectableEditor
- {
- SerializedProperty m_LowHandleRect;
- SerializedProperty m_HighHandleRect;
- SerializedProperty m_FillRect;
- SerializedProperty m_MinValue;
- SerializedProperty m_MaxValue;
- SerializedProperty m_WholeNumbers;
- SerializedProperty m_LowValue;
- SerializedProperty m_HighValue;
- //need ref values for the editor MinMaxSlider
- float low = 0;
- float high = 1;
- SerializedProperty m_OnValueChanged;
- protected override void OnEnable()
- {
- base.OnEnable();
- m_LowHandleRect = serializedObject.FindProperty("m_LowHandleRect");
- m_HighHandleRect = serializedObject.FindProperty("m_HighHandleRect");
- m_FillRect = serializedObject.FindProperty("m_FillRect");
- m_MinValue = serializedObject.FindProperty("m_MinValue");
- m_MaxValue = serializedObject.FindProperty("m_MaxValue");
- m_WholeNumbers = serializedObject.FindProperty("m_WholeNumbers");
- m_LowValue = serializedObject.FindProperty("m_LowValue");
- low = m_LowValue.floatValue;
- m_HighValue = serializedObject.FindProperty("m_HighValue");
- high = m_HighValue.floatValue;
- m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged");
- }
- public override void OnInspectorGUI()
- {
- base.OnInspectorGUI();
- EditorGUILayout.Space();
- serializedObject.Update();
- //grab the updated value affected by m_WholeNumbers
- low = m_LowValue.floatValue;
- high = m_HighValue.floatValue;
- EditorGUILayout.PropertyField(m_LowHandleRect);
- EditorGUILayout.PropertyField(m_HighHandleRect);
- EditorGUILayout.PropertyField(m_FillRect);
- if (m_LowHandleRect.objectReferenceValue != null && m_HighHandleRect.objectReferenceValue != null)
- {
- EditorGUI.BeginChangeCheck();
- EditorGUILayout.PropertyField(m_MinValue);
- EditorGUILayout.PropertyField(m_MaxValue);
- EditorGUILayout.PropertyField(m_WholeNumbers);
- //We're going to do a fair bit of layout here
- EditorGUILayout.BeginHorizontal();
- //Low Label and value
- EditorGUILayout.BeginVertical();
- EditorGUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- GUILayout.Label("Low");
- GUILayout.FlexibleSpace();
- EditorGUILayout.EndHorizontal();
- low = EditorGUILayout.DelayedFloatField(low, GUILayout.MaxWidth(100));
- EditorGUILayout.EndVertical();
- GUILayout.FlexibleSpace();
- //Slider
- EditorGUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
- EditorGUILayout.MinMaxSlider(ref low, ref high, m_MinValue.floatValue, m_MaxValue.floatValue, GUILayout.ExpandWidth(true));
- EditorGUILayout.EndVertical();
- GUILayout.FlexibleSpace();
- //High label and value
- EditorGUILayout.BeginVertical();
- EditorGUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- GUILayout.Label("High");
- GUILayout.FlexibleSpace();
- EditorGUILayout.EndHorizontal();
- high = EditorGUILayout.DelayedFloatField(high, GUILayout.MaxWidth(100));
- EditorGUILayout.EndVertical();
- EditorGUILayout.EndHorizontal();
- m_LowValue.floatValue = low;
- m_HighValue.floatValue = high;
- EditorGUILayout.Space();
- EditorGUILayout.PropertyField(m_OnValueChanged);
- }
- else
- {
- EditorGUILayout.HelpBox("Specify a RectTransform for the RangeSlider fill or the RangeSlider handles or both. Each must have a parent RectTransform that it can slide within.", MessageType.Info);
- }
- serializedObject.ApplyModifiedProperties();
- }
- }
- }
|