protected override void OnHandleDragging(HandleEventData eventData) { var rayOrigin = eventData.rayOrigin; var lastPosition = m_LastPositions[rayOrigin]; var worldPosition = lastPosition; // Raycast against the plane and get the hit point var ray = eventData.GetRay(); if (m_Plane.Raycast(ray, out var distance)) { worldPosition = ray.GetPoint(Mathf.Min(Mathf.Abs(distance), HandleSettings.instance.MaxDragDistance * this.GetViewerScale())); } var deltaPosition = worldPosition - lastPosition; m_LastPositions[rayOrigin] = worldPosition; eventData.deltaPosition = deltaPosition; base.OnHandleDragging(eventData); }
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.Abs(distance)); } var thisTransform = transform; var up = thisTransform.up; var pivot = thisTransform.parent.position; var angle = Vector3.SignedAngle(worldPosition - pivot, m_LastPositions[rayOrigin] - pivot, -up); eventData.deltaRotation = Quaternion.AngleAxis(angle, up); m_LastPositions[rayOrigin] = worldPosition; base.OnHandleDragging(eventData); }
Vector3 GetRayPoint(HandleEventData eventData) { return(eventData.GetRay().GetPoint(m_CurrentRadius)); }