@@ -16,7 +16,6 @@ namespace Microsoft.MixedReality.Toolkit.UI
1616 /// </summary>
1717 public class PinchSlider : MonoBehaviour , IMixedRealityPointerHandler , IMixedRealityFocusHandler
1818 {
19-
2019 #region Serialized Fields and Properties
2120 [ Tooltip ( "The gameObject that contains the slider thumb." ) ]
2221 [ SerializeField ]
@@ -54,20 +53,26 @@ private enum SliderAxis
5453 }
5554
5655 [ SerializeField ]
57- [ Tooltip ( "Where the slider track starts, in local coordinates " ) ]
58- private Vector3 sliderStartPosition = new Vector3 ( - 0 .5f, 0 , 0 ) ;
56+ [ Tooltip ( "Where the slider track starts, as distance from center along slider axis, in local space units. " ) ]
57+ private float sliderStartDistance = - .5f ;
5958 [ SerializeField ]
60- [ Tooltip ( "Where the slider track ends, in local coordinates " ) ]
61- private Vector3 sliderEndPosition = new Vector3 ( 0 .5f, 0 , 0 ) ;
59+ [ Tooltip ( "Where the slider track ends, as distance from center along slider axis, in local space units. " ) ]
60+ private float sliderEndDistance = .5f ;
6261
6362 /// <summary>
6463 /// Gets the start position of the slider, in world space, or zero if invalid.
6564 /// Sets the start position of the slider, in world space, projected to the slider's axis.
6665 /// </summary>
6766 public Vector3 SliderStartPosition
6867 {
69- get { return transform . TransformPoint ( sliderStartPosition ) ; }
70- set { sliderStartPosition = Vector3 . Project ( transform . InverseTransformPoint ( value ) , GetSliderAxis ( ) ) ; }
68+ get
69+ {
70+ return transform . TransformPoint ( GetSliderAxis ( ) * sliderStartDistance ) ;
71+ }
72+ set
73+ {
74+ sliderStartDistance = Vector3 . Dot ( transform . InverseTransformPoint ( value ) , GetSliderAxis ( ) ) ;
75+ }
7176 }
7277
7378 /// <summary>
@@ -76,8 +81,14 @@ public Vector3 SliderStartPosition
7681 /// </summary>
7782 public Vector3 SliderEndPosition
7883 {
79- get { return transform . TransformPoint ( sliderEndPosition ) ; }
80- set { sliderEndPosition = Vector3 . Project ( transform . InverseTransformPoint ( value ) , GetSliderAxis ( ) ) ; }
84+ get
85+ {
86+ return transform . TransformPoint ( GetSliderAxis ( ) * sliderEndDistance ) ;
87+ }
88+ set
89+ {
90+ sliderEndDistance = Vector3 . Dot ( transform . InverseTransformPoint ( value ) , GetSliderAxis ( ) ) ;
91+ }
8192 }
8293
8394 /// <summary>
@@ -106,6 +117,13 @@ public Vector3 SliderTrackDirection
106117 private Vector3 sliderThumbOffset = Vector3 . zero ;
107118 #endregion
108119
120+ #region Constants
121+ /// <summary>
122+ /// Minimum distance between start and end of slider, in world space
123+ /// </summary>
124+ private const float MinSliderLength = 0.001f ;
125+ #endregion
126+
109127 #region Unity methods
110128 public void Start ( )
111129 {
0 commit comments