public void UpdatePositions() { Undo.RecordObjects(grabbedObjects, "Move"); for (int i = 0; i < grabbedObjects.Length; i++) { var grabbedObject = grabbedObjects[i]; var position = grabbedObject.position; var rotation = grabbedObject.rotation; var targetPosition = rayOrigin.position + rayOrigin.rotation * positionOffsets[i]; var targetRotation = rayOrigin.rotation * rotationOffsets[i]; if (m_UsesSnapping.DirectSnap(rayOrigin, grabbedObject.gameObject, ref position, ref rotation, targetPosition, targetRotation)) { var deltaTime = Time.unscaledDeltaTime; grabbedObject.position = Vector3.Lerp(grabbedObject.position, position, k_DirectLazyFollowTranslate * deltaTime); grabbedObject.rotation = Quaternion.Lerp(grabbedObject.rotation, rotation, k_DirectLazyFollowRotate * deltaTime); } else { grabbedObject.position = targetPosition; grabbedObject.rotation = targetRotation; } } }
public void UpdatePositions(IUsesSnapping usesSnapping, bool interpolate = true) { if (suspended) { return; } #if UNITY_EDITOR Undo.RecordObjects(grabbedTransforms, "Move"); #endif var rayOriginRotation = rayOrigin.rotation; var pivot = pivotPoint; for (var i = 0; i < grabbedTransforms.Length; i++) { var grabbedObject = grabbedTransforms[i]; var position = grabbedObject.position; var rotation = grabbedObject.rotation; var targetPosition = pivot + rayOriginRotation * m_PositionOffsets[i]; var targetRotation = rayOriginRotation * m_RotationOffsets[i]; if (usesSnapping.DirectSnap(rayOrigin, grabbedObject, ref position, ref rotation, targetPosition, targetRotation)) { if (interpolate) { var deltaTime = Time.deltaTime; grabbedObject.position = Vector3.Lerp(grabbedObject.position, position, k_DirectLazyFollowTranslate * deltaTime); grabbedObject.rotation = Quaternion.Lerp(grabbedObject.rotation, rotation, k_DirectLazyFollowRotate * deltaTime); } else { grabbedObject.position = position; grabbedObject.rotation = rotation; } } else { grabbedObject.position = targetPosition; grabbedObject.rotation = targetRotation; } } }