Unity UGUI 中 InputField 组件处理拖拽超出文本框边界时自动滚动内容的核心协程
官方源代码 (位于:InputField.cs 的1716行)
IEnumerator MouseDragOutsideRect(PointerEventData eventData){while (m_UpdateDrag && m_DragPositionOutOfBounds){Vector2 position = Vector2.zero;if (!MultipleDisplayUtilities.GetRelativeMousePositionForDrag(eventData, ref position))break;Vector2 localMousePos;RectTransformUtility.ScreenPointToLocalPointInRectangle(textComponent.rectTransform, position, eventData.pressEventCamera, out localMousePos);Rect rect = textComponent.rectTransform.rect;if (multiLine){if (localMousePos.y > rect.yMax)MoveUp(true, true);else if (localMousePos.y < rect.yMin)MoveDown(true, true);}else{if (localMousePos.x < rect.xMin)MoveLeft(true, false);else if (localMousePos.x > rect.xMax)MoveRight(true, false);}UpdateLabel();float delay = multiLine ? kVScrollSpeed : kHScrollSpeed;if (m_WaitForSecondsRealtime == null)m_WaitForSecondsRealtime = new WaitForSecondsRealtime(delay);elsem_WaitForSecondsRealtime.waitTime = delay;yield return m_WaitForSecondsRealtime;}m_DragCoroutine = null;}