Any thoughts about adding the possibility to make a slider logarithmic? This would be very useful for many cases. If i want to do it myself i guess i have to make a completely new Slider component?
I was looking for the same thing. It's been a while, but maybe this will help: I just thought to take the value in as a linear value, and then apply the exponential/logarithm in the script itself maybe you can somehow override the readout to say the post-modified value as well, but the "actual" value of the slider is the linear one, still
I know this is an ancient thread, but Unity's already implemented a power/log slider; and regular sliders are simply power sliders with a power of 1.0f. However, the dang method is internal :-/ Try this Code (CSharp): #if UNITY_EDITOR [CustomPropertyDrawer(typeof(LogarithmicRangeAttribute))] public class LogarithmicRangeDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { LogarithmicRangeAttribute attribute = (LogarithmicRangeAttribute) this.attribute; if (property.propertyType != SerializedPropertyType.Float) { EditorGUI.LabelField(position, label.text, "Use LogarithmicRange with float."); return; } Slider(position, property, attribute.min, attribute.max, attribute.power, label); } public static void Slider( Rect position, SerializedProperty property, float leftValue, float rightValue, float power, GUIContent label) { label = EditorGUI.BeginProperty(position, label, property); EditorGUI.BeginChangeCheck(); float num = PowerSlider(position, label, property.floatValue, leftValue, rightValue, power); if (EditorGUI.EndChangeCheck()) property.floatValue = num; EditorGUI.EndProperty(); } public static float PowerSlider(Rect position, GUIContent label, float value, float leftValue, float rightValue, float power) { var editorGuiType = typeof(EditorGUI); var methodInfo = editorGuiType.GetMethod( "PowerSlider", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static, null, new[] {typeof(Rect), typeof(GUIContent), typeof(float), typeof(float), typeof(float), typeof(float)}, null); if (methodInfo != null) { return (float)methodInfo.Invoke(null, new object[]{position, label, value, leftValue, rightValue, power}); } return leftValue; } } #endif [AttributeUsage(AttributeTargets.Field)] public class LogarithmicRangeAttribute : PropertyAttribute { public readonly float min = 1e-3f; public readonly float max = 1e3f; public readonly float power = 2; public LogarithmicRangeAttribute(float min, float max, float power) { if (min <= 0) { min = 1e-4f; } this.min = min; this.max = max; this.power = power; } }
Was doing some audio related editor stuff and cooked one up myself. This one allows for a custom min, max and a value for the center. https://gist.github.com/bartofzo/6ad28a05ba9fc82e10a64f0c121c5c24