스크롤뷰에서 이벤트핸들러 공유하기

2021. 5. 26. 15:38개발/유니티

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class Item : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    void OnBeginDrag(PointerEventData eventData)
    {
        //구현된 기능
    }
    
    void OnDrag(PointerEventData eventData)
    {
        //구현된 기능
    }
    
    void OnEndDrag(PointerEventData eventData)
    {
        //구현된 기능
    }
}

유니티에서 스크롤뷰 안에 있는 아이템을 커스텀하는 경우가 있다.

 

해당 아이템에서 위에처럼 직접 드래그나 클릭관련 이벤트를 구현할경우

그 부모의 이벤트는 무시하는 경향이 있다. (그냥 오버라이트되는듯)

 

해당 문제를 해결하려면 scrollrect의 이벤트함수를 직접 연결해줘야한다.

 

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class Item : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    public ScrollRect scrollView;

    void OnBeginDrag(PointerEventData eventData)
    {
        scrollView.OnBeginDrag(eventData);
        //구현된 기능
    }
    
    void OnDrag(PointerEventData eventData)
    {
        scrollView.OnDrag(eventData);
        //구현된 기능
    }
    
    void OnEndDrag(PointerEventData eventData)
    {
        scrollView.OnEndDrag(eventData);
        //구현된 기능
    }
}

 

ScrollRect에는 Hierarchy에 있는 오브젝트를 Inspector창에 직접 추가해주면 된다.

이렇게하면 ScrollRect의 이벤트 사용하면서도 직접 구현된 기능들은 동시에 작동시킬 수 있다.