유니티 공부

클릭, 터치 인터페이스 (IPointerDownHandler, IPointerUpHandler, IPointerClickHandler

ogh4554 2025. 3. 6. 16:39

개인 프로젝트를 진행중 UI Scroll View 내에 TextMeshPro 프리팹을 생성하여 드래그 앤 드롭을 해야하는 필요가 있었음. 그리하여 구글링 해 본 결과 이미 유니티 내에 인터페이스로 구현할 수 있도록 기능이 제공되고 있었음.

 

1. 인터페이스 각 기능

IPointerDownHandler, IPointerUpHandler, IPointerClickHandler 는 모두 유니티에 포함된 인터페이스이며 이벤트 시스템을 활용하여 UI 오브젝트에 적용할 수 있는 클릭, 터치 관련 기능을 담당할 수 있도록 함.

 

각 인터페이스는 PointerEventData 클래스 타입의 매개변수를 받아서 구현해야 함. PointerEventData 클래스는 클릭한 위치(Position), 마지막 클릭 시간(clickTime), 연속클릭 횟수(clickCount) 등의 정보를 포함하고 있어 필요할 경우 사용할 수 있음.

 

using UnityEngine;
using UnityEngine.EventSystems;

public class DragAndDropUI : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
{
    public void OnPointerDown(PointerEventData data)
    {
        Debug.Log("PointerDown");
    }

    public void OnPointerUp(PointerEventData data) 
    {
        Debug.Log("PointerUp");
    }

    public void OnPointerClick(PointerEventData data)
    {
        Debug.Log("PointerClick");
    }
}

 

보이는 바와 같이 호출 순서는 OnPointerDown -> OnPointerUp -> OnPointerclick 순으로 호출 됨.

OnPointerDown : 오브젝트를 클릭하여 마우스가 내려가는 그 순간 호출.(Input.MouseButtonDown 과 비슷한 것 같음)

 

OnPointerUp : 오브젝트 위에서 눌렀던 마우스가 올라가는 순간 호출.

 

OnPointerClick : 마우스 버튼을 눌렀다가 떼는 순간 호출.

 

OnPointerUp 과 OnPointerClick의 경우 컴포넌트가 달려있는 오브젝트 이외의 위치에서 클릭한 상태로 오브젝트 위에서 마우스를 떼어도 호출되지 않음.

 

2. 주의해야할 점

1) 만약 IPointer 인터페이스들이 작동하지 않을 경우, UI 오브젝트의 Graphic Raycaster 컴포넌트가 추가되어 있어야하며, Raycast Target 항목이 체크되어 있어야 함.

또한, EventSystem에서 제공하는 기능이기 때문에 Scene에 EventSystem이 있어야 함.

 

2) UI가 아닌 게임오브젝트에 사용할경우 Collider 가 추가되어 있어야 하며 MainCamera에 Physics Raycaster 컴포넌트가 포함되어 있어야 함. 

 

만약 기능이 작동이 되지 않는다면 주의점에서 언급된 부분을 다시 검토해 볼 것!

 

 


이외에도 IBeginDragHandler(드래그가 시작되는 순간 호출), IEndDragHandler(드래그가 끝나는 순간 호출), IDragHandler(드래그 되는 동안 호출) 등의 기능도 있다.

위 세가지 기능과 마찬가지이기 때문에 잘 사용하길 바람 이상 끝!

'유니티 공부' 카테고리의 다른 글

코루틴 (Coroutine)  (2) 2024.11.13
유니티이벤트(Unity Event) & 유니티액션(Unity Action)  (0) 2024.11.11