Пример #1
0
            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;
                    }
                }
            }
Пример #2
0
            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;
                    }
                }
            }