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); }
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); }
Vector3 GetRayPoint(HandleEventData eventData) { return(eventData.GetRay().GetPoint(m_CurrentRadius)); }