示例#1
0
        protected override void OnHandleDragging(HandleEventData eventData)
        {
            var rayOrigin     = eventData.rayOrigin;
            var lastPosition  = m_LastPositions[rayOrigin];
            var worldPosition = lastPosition;

            float distance;
            var   ray = eventData.GetRay();

            if (m_Plane.Raycast(ray, out distance))
            {
                worldPosition = ray.GetPoint(Mathf.Min(Mathf.Abs(distance), k_MaxDragDistance * this.GetViewerScale()));
            }

            var deltaPosition = worldPosition - lastPosition;

            m_LastPositions[rayOrigin] = worldPosition;

            deltaPosition           = transform.InverseTransformVector(deltaPosition);
            deltaPosition.z         = 0;
            deltaPosition           = transform.TransformVector(deltaPosition);
            eventData.deltaPosition = deltaPosition;

            base.OnHandleDragging(eventData);
        }
示例#2
0
        protected override void OnHandleDragging(HandleEventData eventData)
        {
            var rayOrigin       = eventData.rayOrigin;
            var lastPosition    = m_LastPositions[rayOrigin];
            var lastDragForward = m_LastRayDirection[rayOrigin];
            var worldPosition   = lastPosition;

            float distance;
            var   ray = eventData.GetRay();

            if (m_Plane.Raycast(ray, out distance))
            {
                worldPosition = ray.GetPoint(Mathf.Abs(distance));
            }

            var thisTransform = transform;
            var up            = thisTransform.up;
            var dragTangent   = Vector3.Cross(up, (startDragPositions[rayOrigin] - thisTransform.position).normalized);
            var angle         = m_TurnSpeed * Vector3.Angle(ray.direction, lastDragForward) *
                                Vector3.Dot((worldPosition - lastPosition).normalized, dragTangent);

            eventData.deltaRotation = Quaternion.AngleAxis(angle, up);

            m_LastPositions[rayOrigin]    = worldPosition;
            m_LastRayDirection[rayOrigin] = ray.direction;

            base.OnHandleDragging(eventData);
        }
示例#3
0
 Vector3 GetRayPoint(HandleEventData eventData)
 {
     return(eventData.GetRay().GetPoint(m_CurrentRadius));
 }