@@ -131,10 +131,10 @@ public void SetScaleDelta(Vector3 scaleDelta, Vector3 scalePivot, Quaternion sca
131
131
132
132
private void SetPosition ( Vector3 newPosition )
133
133
{
134
- SetPositionDelta ( newPosition - position ) ;
134
+ SetPositionDelta ( newPosition - position , true ) ;
135
135
}
136
136
137
- public void SetPositionDelta ( Vector3 positionDelta )
137
+ public void SetPositionDelta ( Vector3 positionDelta , bool applySmartRounding )
138
138
{
139
139
Vector3 localPositionDelta = positionDelta ;
140
140
Vector3 minDifference = ManipulationToolUtility . minDragDifference ;
@@ -154,23 +154,37 @@ public void SetPositionDelta(Vector3 positionDelta)
154
154
if ( rectTransform == null )
155
155
{
156
156
Vector3 newLocalPosition = localPosition + localPositionDelta ;
157
- newLocalPosition . x = zeroXDelta ? localPosition . x : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . x , minDifference . x ) ;
158
- newLocalPosition . y = zeroYDelta ? localPosition . y : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . y , minDifference . y ) ;
159
- newLocalPosition . z = zeroZDelta ? localPosition . z : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . z , minDifference . z ) ;
157
+
158
+ if ( applySmartRounding )
159
+ {
160
+ newLocalPosition . x = zeroXDelta ? localPosition . x : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . x , minDifference . x ) ;
161
+ newLocalPosition . y = zeroYDelta ? localPosition . y : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . y , minDifference . y ) ;
162
+ newLocalPosition . z = zeroZDelta ? localPosition . z : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . z , minDifference . z ) ;
163
+ }
164
+
160
165
transform . localPosition = newLocalPosition ;
161
166
}
162
167
else
163
168
{
164
169
// Set position.z
165
170
Vector3 newLocalPosition = localPosition + localPositionDelta ;
166
- newLocalPosition . z = zeroZDelta ? localPosition . z : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . z , minDifference . z ) ;
171
+
172
+ if ( applySmartRounding )
173
+ newLocalPosition . z = zeroZDelta ? localPosition . z : MathUtils . RoundBasedOnMinimumDifference ( newLocalPosition . z , minDifference . z ) ;
174
+
167
175
transform . localPosition = newLocalPosition ;
168
176
169
177
// Set anchoredPosition
170
178
Vector2 newAnchoredPosition = anchoredPosition + ( Vector2 ) localPositionDelta ;
171
- newAnchoredPosition . x = zeroXDelta ? anchoredPosition . x : MathUtils . RoundBasedOnMinimumDifference ( newAnchoredPosition . x , minDifference . x ) ;
172
- newAnchoredPosition . y = zeroYDelta ? anchoredPosition . y : MathUtils . RoundBasedOnMinimumDifference ( newAnchoredPosition . y , minDifference . y ) ;
179
+
180
+ if ( applySmartRounding )
181
+ {
182
+ newAnchoredPosition . x = zeroXDelta ? anchoredPosition . x : MathUtils . RoundBasedOnMinimumDifference ( newAnchoredPosition . x , minDifference . x ) ;
183
+ newAnchoredPosition . y = zeroYDelta ? anchoredPosition . y : MathUtils . RoundBasedOnMinimumDifference ( newAnchoredPosition . y , minDifference . y ) ;
184
+ }
185
+
173
186
rectTransform . anchoredPosition = newAnchoredPosition ;
187
+
174
188
if ( rectTransform . drivenByObject != null )
175
189
RectTransform . SendReapplyDrivenProperties ( rectTransform ) ;
176
190
}
@@ -335,15 +349,24 @@ public static void SetPositionDelta(Vector3 positionDelta)
335
349
if ( s_MouseDownState == null )
336
350
return ;
337
351
352
+ if ( positionDelta . magnitude == 0 )
353
+ return ;
354
+
338
355
for ( int i = 0 ; i < s_MouseDownState . Length ; i ++ )
339
356
{
340
357
var cur = s_MouseDownState [ i ] ;
341
358
Undo . RecordObject ( ( cur . rectTransform != null ? ( Object ) cur . rectTransform : ( Object ) cur . transform ) , "Move" ) ;
342
359
}
343
360
344
- for ( int i = 0 ; i < s_MouseDownState . Length ; i ++ )
361
+ if ( s_MouseDownState . Length > 0 )
345
362
{
346
- s_MouseDownState [ i ] . SetPositionDelta ( positionDelta ) ;
363
+ s_MouseDownState [ 0 ] . SetPositionDelta ( positionDelta , true ) ;
364
+ Vector3 firstDelta = s_MouseDownState [ 0 ] . transform . localPosition - s_MouseDownState [ 0 ] . localPosition ;
365
+
366
+ for ( int i = 1 ; i < s_MouseDownState . Length ; i ++ )
367
+ {
368
+ s_MouseDownState [ i ] . SetPositionDelta ( firstDelta , false ) ;
369
+ }
347
370
}
348
371
}
349
372
0 commit comments