在拖拽物体上绑定的本脚本中,重写一下UGUI的drag相关事件,调ScrollRect的drag等方法
public class DragScrollView : EventTriggerListener
{/// <summary>
/// Reference to the scroll view that will be dragged by the script.
/// </summary>
public ScrollRect scrollView;
// Legacy functionality, kept for backwards compatibility. Use 'scrollView' instead.
[HideInInspector]
[SerializeField]
ScrollRect draggablePanel;
Transform mTrans;
ScrollRect mScroll;
bool mAutoFind = false;
bool mStarted = false;
/// <summary>
/// Automatically find the scroll view if possible.
/// </summary>
void OnEnable()
{
mTrans = transform;
// Auto-upgrade
if (scrollView == null && draggablePanel != null) {
scrollView = draggablePanel;
draggablePanel = null;
}
if (mStarted && (mAutoFind || mScroll == null))
FindScrollView();
}
/// <summary>
/// Find the scroll view.
/// </summary>
void Start()
{
mStarted = true;
FindScrollView();
}
/// <summary>
/// Find the scroll view to work with.
/// </summary>
void FindScrollView()
{
// If the scroll view is on a parent, don't try to remember it (as we want it to be dynamic in case of re-parenting)
ScrollRect sv = mTrans.GetComponentInParent<ScrollRect>();
if (scrollView == null) {
scrollView = sv;
mAutoFind = true;
} else if (scrollView == sv) {
mAutoFind = true;
}
mScroll = scrollView;
}
public override void OnDrag(UnityEngine.EventSystems.PointerEventData eventData)
{
scrollView.OnDrag(eventData);
}
public override void OnInitializePotentialDrag(PointerEventData eventData)
{
scrollView.OnInitializePotentialDrag(eventData);
}
public override void OnBeginDrag(PointerEventData eventData)
{
scrollView.OnBeginDrag(eventData);
}
public override void OnEndDrag(PointerEventData eventData)
{
scrollView.OnEndDrag(eventData);
}
}