Unity | 유니티/Unity 개발 일지

[Unity] IPointer Interface ( 클릭 / 터치 이벤트)

maintain_H 2023. 3. 25. 18:44
반응형

 이번에는 유니티에서 지원되는 이벤트 IPointer에 대해 작성하려고 한다.

 

IPointer Interface는 터치 이벤트를 구현할 때 매우매우매우 편리한 인터페이스이다.

 

[ IPointer Interface ]

 

 유니티 EventSystems에서 기본으로 제공되는 인터페이스이다. 클릭 또는 터치, 드래그 등의

이벤트를 구현할 때 사용한다.

 

 [ 주의 | IPointer가 작동하지 않는 이유 ]

 

 만약 IPointer가 작동하지 않는다면 여기를 참고하면 된다!

 

 이 기능을 사용하기 위해서는 UI 오브젝트에는 Graphic Raycaster 컴포넌트가 추가되어

있어야 하고, Raycast Target 체크 되어 있어야 한다.

EventSystem에서 제공하는 기능이기 때문에 Scene에 무조건 "EventSystem"이 있어야 한다.

 그리고 오브젝트에 사용할 때는 Collider 또는 Collider2D 컴포넌트 추가되어 있어야 하고,

"Main Camera"에 "Physics Raycaster" 컴포넌트가 꼭 추가되어 있어야 한다.

오브젝트에서 IPointer Handler가 작동하지 않았는데 이게 없어서 안 됐던 것이었따..

없으면 안 됨! 진짜 안 됨!

 

[ 기능 ]

 IPointer Interface에서 제공하는 기능은 터치, 드래그 등 진짜 많다.

 여기서는 많이 사용하는 기능들에 대해서 설명하려 한다. 궁금하다면 유니티 레퍼런스를 참고하면 된다.

 

 Input.GetMouseButton 과 같은 기능을 가진다. 

다른 점은 GetMouseButton은 화면 전체에서 이벤트가 호출된다면,

IPointer는 스크립트가 부착된 오브젝트에서만 이벤트가 호출된다. 

 

 

[ IPointerClickHandler ]

 마우스를 클릭 / 터치 했을 때 한 번 호출되는 이벤트이다.

 누르고 뗐을 때 호출된다.

 

[ IPointerDownHandler ]

 마우스를 클릭 / 터치 하는 순간 호출되는 이벤트이다.

 Click과 다르게 누르는 순간 호출된다!

 

[ IPointerUpHandler ]

마우스를 클릭 / 터치 하고 뗄 때 호출되는 이벤트이다.

손을 떼는 순간 호출된다.

 

[ IBeginDragHandler ]

드래그가 시작되는 순간 호출되는 이벤트이다.

 

[ IEndDragHandler ]

드래그가 끝나는 순간 호출되는 이벤트이다.

 

[ IDragHandler ]

드래그되는 동안 호출되는 이벤트이다.

 

 

[ 사용 방법 ]

 

오브젝트에 Collider 부착

 클릭 이벤트를 넣을 오브젝트를 만들고, Collider 컴포넌트를 추가한다.

 

 

Event System 생성 방법

 이때 만약 Scene에 "EventSystem"이 없다면 추가해준다.

하이라키에서 우클릭 -> UI -> Event System을 누르면 된다.

 

 

스크립트를 짜기 전에! 

UI에서 IPointer Interface를 사용할 거라면 상관 없지만, 

오브젝트에 사용할 거라면 Main CameraPhysics Raycaster 컴포넌트를 추가해준다.

Main Camera에 Physics Raycaster 부착

 

 

그리고 이제 스크립트를 짜준다.!

이렇게 MonoBehaviour 옆에 , 사용할 IPointerHandler를 써준다.

 그럼 이렇게 빨간 밑줄이 쳐지는데, 당황하지 않고 침착하게

Alt + Enter를 눌러줘서 인터페이스를 구현해준다.

 

인터페이스 생성

그리고 여기에 원하는 기능을 넣어주면 된다!

 

 

 

 IPointerClickHandler와 Input.GetMouseButtonDown의 차이를 보여주기 위해 코드를 이렇게 작성했다.

public class IPointerTest : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("ClickHandler");
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) Debug.Log("GetMouseButtonDown");
    }
}

 

 

[ 실행 결과 ]

실행화면

 오브젝트를 클릭하면 Input, IPointer 둘 다 호출되지만,

오브젝트 바깥을 클릭하면 Input만 호출되는 걸 볼 수 있다.

 

 

 

오늘 포스팅 끝!

만약 다른 기능 사용 방법을 알고 싶다면 댓글 주시면 빠르게 업로드 하겠습니다!

반응형