Skip to content

Commit da0cd07

Browse files
committed
Fixed for sliders with min-max values outside range \[0-1\] when slider is configured for grab interaction (IsTouchable = false)
1 parent e25a7a8 commit da0cd07

File tree

8 files changed

+632
-3
lines changed

8 files changed

+632
-3
lines changed

org.mixedrealitytoolkit.uxcore/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
88

99
* StateVisualizer: Modified access modifiers of State, stateContainers and UpdateStateValue to protected internal to allow adding states through subclassing. [PR #926](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/pull/926)
1010

11+
### Fixed
12+
13+
* Fixed for sliders with min-max values outside range \[0-1\] when slider is configured for grab interaction (IsTouchable = false) [Issue 944](https://github.com/MixedRealityToolkit/MixedRealityToolkit-Unity/issues/944)
14+
1115
## [3.2.2-development] - 2024-08-29
1216

1317
### Changed

org.mixedrealitytoolkit.uxcore/Slider/Slider.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@ private void UpdateSliderValue()
370370

371371
var handDelta = Vector3.Dot(SliderTrackDirection.normalized, interactorDelta);
372372

373-
float normalizedValue = Mathf.Clamp(StartSliderValue + handDelta / SliderTrackDirection.magnitude, 0f, 1.0f);
373+
var normalizedStartValue = (StartSliderValue - MinValue) / (MaxValue - MinValue);
374+
float normalizedValue = Mathf.Clamp(normalizedStartValue + handDelta / SliderTrackDirection.magnitude, 0f, 1.0f);
374375

375376
var unsnappedValue = normalizedValue * (MaxValue - MinValue) + MinValue;
376377
Value = useSliderStepDivisions ? SnapSliderToStepPositions(unsnappedValue) : unsnappedValue;
@@ -386,12 +387,12 @@ protected override void OnSelectEntered(SelectEnterEventArgs args)
386387
base.OnSelectEntered(args);
387388

388389
// Snap to position by setting the startPosition
389-
// to the slider start, and start value to zero.
390+
// to the slider start, and start value to MinValue.
390391
// However, don't snap when using grabs.
391392
if (snapToPosition && !(args.interactorObject is IGrabInteractor))
392393
{
393394
StartInteractionPoint = SliderStart.position;
394-
StartSliderValue = 0.0f;
395+
StartSliderValue = MinValue;
395396
}
396397
else
397398
{
Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!1 &1110146781791029298
4+
GameObject:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
serializedVersion: 6
10+
m_Component:
11+
- component: {fileID: 6995764633665568835}
12+
- component: {fileID: 225870791008350227}
13+
- component: {fileID: 2620194905356491814}
14+
m_Layer: 0
15+
m_Name: GrabSliderTest
16+
m_TagString: Untagged
17+
m_Icon: {fileID: 0}
18+
m_NavMeshLayer: 0
19+
m_StaticEditorFlags: 0
20+
m_IsActive: 1
21+
--- !u!224 &6995764633665568835
22+
RectTransform:
23+
m_ObjectHideFlags: 0
24+
m_CorrespondingSourceObject: {fileID: 0}
25+
m_PrefabInstance: {fileID: 0}
26+
m_PrefabAsset: {fileID: 0}
27+
m_GameObject: {fileID: 1110146781791029298}
28+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29+
m_LocalPosition: {x: 0, y: 0, z: 1}
30+
m_LocalScale: {x: 0.001, y: 0.001, z: 0.001}
31+
m_ConstrainProportionsScale: 0
32+
m_Children:
33+
- {fileID: 3903447421959142264}
34+
m_Father: {fileID: 0}
35+
m_RootOrder: 0
36+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
37+
m_AnchorMin: {x: 0.5, y: 0.5}
38+
m_AnchorMax: {x: 0.5, y: 0.5}
39+
m_AnchoredPosition: {x: 0, y: 1.6}
40+
m_SizeDelta: {x: 200, y: 200}
41+
m_Pivot: {x: 0.5, y: 0.5}
42+
--- !u!223 &225870791008350227
43+
Canvas:
44+
m_ObjectHideFlags: 0
45+
m_CorrespondingSourceObject: {fileID: 0}
46+
m_PrefabInstance: {fileID: 0}
47+
m_PrefabAsset: {fileID: 0}
48+
m_GameObject: {fileID: 1110146781791029298}
49+
m_Enabled: 1
50+
serializedVersion: 3
51+
m_RenderMode: 2
52+
m_Camera: {fileID: 0}
53+
m_PlaneDistance: 100
54+
m_PixelPerfect: 0
55+
m_ReceivesEvents: 1
56+
m_OverrideSorting: 0
57+
m_OverridePixelPerfect: 0
58+
m_SortingBucketNormalizedSize: 0
59+
m_AdditionalShaderChannelsFlag: 30
60+
m_SortingLayerID: 0
61+
m_SortingOrder: 0
62+
m_TargetDisplay: 0
63+
--- !u!114 &2620194905356491814
64+
MonoBehaviour:
65+
m_ObjectHideFlags: 0
66+
m_CorrespondingSourceObject: {fileID: 0}
67+
m_PrefabInstance: {fileID: 0}
68+
m_PrefabAsset: {fileID: 0}
69+
m_GameObject: {fileID: 1110146781791029298}
70+
m_Enabled: 1
71+
m_EditorHideFlags: 0
72+
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
73+
m_Name:
74+
m_EditorClassIdentifier:
75+
m_UiScaleMode: 0
76+
m_ReferencePixelsPerUnit: 100
77+
m_ScaleFactor: 1
78+
m_ReferenceResolution: {x: 800, y: 600}
79+
m_ScreenMatchMode: 0
80+
m_MatchWidthOrHeight: 0
81+
m_PhysicalUnit: 3
82+
m_FallbackScreenDPI: 96
83+
m_DefaultSpriteDPI: 96
84+
m_DynamicPixelsPerUnit: 1
85+
m_PresetInfoIsWorld: 0
86+
--- !u!1001 &8710701791544316266
87+
PrefabInstance:
88+
m_ObjectHideFlags: 0
89+
serializedVersion: 2
90+
m_Modification:
91+
m_TransformParent: {fileID: 6995764633665568835}
92+
m_Modifications:
93+
- target: {fileID: 4270209841583229004, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
94+
propertyPath: m_Size.x
95+
value: 200
96+
objectReference: {fileID: 0}
97+
- target: {fileID: 5677198131096132917, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
98+
propertyPath: m_AnchorMax.x
99+
value: 0.5
100+
objectReference: {fileID: 0}
101+
- target: {fileID: 5677198132670553562, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
102+
propertyPath: m_AnchorMax.x
103+
value: 0.5
104+
objectReference: {fileID: 0}
105+
- target: {fileID: 5677198132670553562, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
106+
propertyPath: m_AnchorMin.x
107+
value: 0.5
108+
objectReference: {fileID: 0}
109+
- target: {fileID: 5677198132670553562, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
110+
propertyPath: m_AnchoredPosition.x
111+
value: 0
112+
objectReference: {fileID: 0}
113+
- target: {fileID: 5677198132670553562, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
114+
propertyPath: m_AnchoredPosition.y
115+
value: 0
116+
objectReference: {fileID: 0}
117+
- target: {fileID: 5677198132984834573, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
118+
propertyPath: value
119+
value: 5
120+
objectReference: {fileID: 0}
121+
- target: {fileID: 5677198132984834573, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
122+
propertyPath: maxValue
123+
value: 10
124+
objectReference: {fileID: 0}
125+
- target: {fileID: 5677198132984834573, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
126+
propertyPath: isTouchable
127+
value: 0
128+
objectReference: {fileID: 0}
129+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
130+
propertyPath: m_Pivot.x
131+
value: 0.5
132+
objectReference: {fileID: 0}
133+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
134+
propertyPath: m_Pivot.y
135+
value: 0.5
136+
objectReference: {fileID: 0}
137+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
138+
propertyPath: m_RootOrder
139+
value: 0
140+
objectReference: {fileID: 0}
141+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
142+
propertyPath: m_AnchorMax.x
143+
value: 0.5
144+
objectReference: {fileID: 0}
145+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
146+
propertyPath: m_AnchorMax.y
147+
value: 0.5
148+
objectReference: {fileID: 0}
149+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
150+
propertyPath: m_AnchorMin.x
151+
value: 0.5
152+
objectReference: {fileID: 0}
153+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
154+
propertyPath: m_AnchorMin.y
155+
value: 0.5
156+
objectReference: {fileID: 0}
157+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
158+
propertyPath: m_SizeDelta.x
159+
value: 200
160+
objectReference: {fileID: 0}
161+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
162+
propertyPath: m_SizeDelta.y
163+
value: 20
164+
objectReference: {fileID: 0}
165+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
166+
propertyPath: m_LocalPosition.x
167+
value: 0
168+
objectReference: {fileID: 0}
169+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
170+
propertyPath: m_LocalPosition.y
171+
value: 0
172+
objectReference: {fileID: 0}
173+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
174+
propertyPath: m_LocalPosition.z
175+
value: 0
176+
objectReference: {fileID: 0}
177+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
178+
propertyPath: m_LocalRotation.w
179+
value: 1
180+
objectReference: {fileID: 0}
181+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
182+
propertyPath: m_LocalRotation.x
183+
value: 0
184+
objectReference: {fileID: 0}
185+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
186+
propertyPath: m_LocalRotation.y
187+
value: 0
188+
objectReference: {fileID: 0}
189+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
190+
propertyPath: m_LocalRotation.z
191+
value: 0
192+
objectReference: {fileID: 0}
193+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
194+
propertyPath: m_AnchoredPosition.x
195+
value: 0
196+
objectReference: {fileID: 0}
197+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
198+
propertyPath: m_AnchoredPosition.y
199+
value: 0
200+
objectReference: {fileID: 0}
201+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
202+
propertyPath: m_LocalEulerAnglesHint.x
203+
value: 0
204+
objectReference: {fileID: 0}
205+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
206+
propertyPath: m_LocalEulerAnglesHint.y
207+
value: 0
208+
objectReference: {fileID: 0}
209+
- target: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
210+
propertyPath: m_LocalEulerAnglesHint.z
211+
value: 0
212+
objectReference: {fileID: 0}
213+
- target: {fileID: 5677198132984834579, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
214+
propertyPath: m_Name
215+
value: CanvasSlider
216+
objectReference: {fileID: 0}
217+
m_RemovedComponents: []
218+
m_SourcePrefab: {fileID: 100100000, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
219+
--- !u!224 &3903447421959142264 stripped
220+
RectTransform:
221+
m_CorrespondingSourceObject: {fileID: 5677198132984834578, guid: f64620d502cdf0f429efa27703913cb7, type: 3}
222+
m_PrefabInstance: {fileID: 8710701791544316266}
223+
m_PrefabAsset: {fileID: 0}

org.mixedrealitytoolkit.uxcore/Tests/Runtime/Prefabs/GrabSliderTest.prefab.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)