如何在Unity 4.6中的ScrollRect中使内容可拖动?

时间:2014-12-17 03:39:20

标签: unity3d unityscript

使用ScrollRect实现滚动视图时,强制移动用户在背景上滚动,因为Unity在here中说明

  

要滚动内容,必须从ScrollRect的边界内部接收输入,而不是内容本身。

如何通过滚动内容使滚动用户友好?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

实施IPointerDownHandler,IPointerUpHandler,IDragHandler

public void OnPointerDown(PointerEventData eventData)
{
    _parentScroll.OnBeginDrag(eventData);
}

public void OnPointerUp(PointerEventData eventData)
{
    _parentScroll.OnEndDrag(eventData);
}
public void OnDrag(PointerEventData eventData)
{
    _parentScroll.OnDrag(eventData);
}

答案 1 :(得分:2)

我已经制作了这个脚本来解决这个问题,内容按预期滚动视图。只需将其添加到ScrollRect内容中的每个元素即可。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ScrollElement : MonoBehaviour, IDragHandler
{

    ScrollRect scrollRect;

    // Use this for initialization
    void Start () 
    {
        scrollRect = GetComponentInParent<ScrollRect> ();
    }

    public void OnDrag (PointerEventData eventData)
    {
        scrollRect.verticalNormalizedPosition -= eventData.delta.y / ((float)Screen.height);
    }
}

请注意,在Awake上,它会尝试找到第一个ScrollRect组件。 谨防如果对象本身(this)包含组件GetComponentInParent<ScrollRect> (),则会使用该组件。