IPointer 인터페이스

이준영·2025년 10월 28일

오늘은 IPointer 인터페이스에 대해서 정리.

사용 목적

  • IPointer 인터페이스들은 유니티의 Event System(이벤트 시스템)에서 제공하는 핵심 인터페이스로, 주로 UI 요소나 Graphic Raycaster 컴포넌트가 부착된 오브젝트에 마우스나 터치 같은 포인터 입력을 처리하기 위해 사용.
Graphic Raycaster
  • UI를 생성하면 같이 생성되는 Canvas에 포함되어 있는 컴포넌트.
  • 나중에 Physics Raycaster와 같이 학습이 필요할 듯.

종류

인터페이스 이름사용 목적포함된 메서드
IPointerClickHandler포인터가 클릭되었을 때OnPointerClick(PointerEventData eventData)
IPointerDownHandler포인터가 오브젝트 위에서 눌러졌을 때OnPointerDown(PointerEventData eventData)
IPointerUpHandler포인터가 오브젝트 위에서 떼어졌을 때OnPointerUp(PointerEventData eventData)
IPointerEnterHandler포인터가 오브젝트의 충돌 범위 안으로 진입했을 때OnPointerEnter(PointerEventData eventData)
IPointerExitHandler포인터가 오브젝트의 충돌 범위 밖으로 나갔을 때OnPointerExit(PointerEventData eventData)
IDragHandler포인터가 눌린 상태에서 드래그될 때OnDrag(PointerEventData eventData)
IEndDragHandler드래그가 종료되었을 때OnEndDrag(PointerEventData eventData)

장점

  1. 코드의 유연성 및 확장성

    • 이벤트 처리를 위한 표준화된 계약을 제공하여, 다양한 오브젝트가 동일한 방식으로 포인터 이벤트에 반응하도록 만들 수 있음.
    • 새로운 기능을 추가하거나 수정할 때 기존 코드를 최소한으로 변경할 수 있음.
  2. 명확한 역할 분리

    • 해당 오브젝트가 어떤 종류의 포인터 이벤트를 처리하는지 직관적으로 파악할 수 있음.
  3. 유니티 이벤트 시스템과의 통합

    • 유니티의 강력한 이벤트 시스템을 활용하여 복잡한 이벤트 처리 로직을 직접 구현할 필요 없이 안정적으로 입력 이벤트를 처리할 수 있음.

단점

  1. UI 및 Event System 의존성 (레이캐스팅 필요)

    • IPointer 인터페이스는 유니티의 Event System을 기반으로 작동하며, 주로 UGUI 요소와의 상호작용을 위해 설계됨.
    • 이 인터페이스가 작동하려면 오브젝트에 Graphic Raycaster 또는 Physics Raycaster 컴포넌트가 존재해야 함.
    • 3D 게임 오브젝트에 이 인터페이스를 적용할 경우, Physics Raycaster를 설정해야 하고, UI와 3D 오브젝트 간의 이벤트 우선순위 및 충돌 처리 로직을 별도로 관리해야 하므로 복잡해질 수 있음.
  2. 코드 결합도 증가 가능성

    • 특정 이벤트를 처리하려면 스크립트가 해당 인터페이스(IPointerClickHandler 등)를 반드시 상속받고 메서드를 구현해야 함.
    • 해당 스크립트가 이벤트 처리 로직을 갖도록 강제하여, 이벤트와 직접 관련 없는 로직이 하나의 컴포넌트에 섞이는 높은 결합도를 유발할 수 있음.
  3. 이벤트 전달 및 우선순위 관리

    • UI가 중첩되어 있을 때, 이벤트는 가장 위에 있는 요소부터 처리됨.
    • 만약 하위 UI 요소가 이벤트를 처리하고 소비하지 않으면, 이벤트가 뒤에 있는 UI 요소로 전달될 수 있음.
  4. 성능 오버헤드 (대규모 환경 시)

    • Event System은 프레임마다 포인터의 위치에서 Raycasting을 수행하여 어떤 오브젝트와 충돌했는지 검사함.
    • 캔버스 내의 UI 요소가 매우 많거나, IPointer 인터페이스를 사용하는 오브젝트가 화면에 대규모로 배치될 경우, 레이캐스팅 연산으로 인한 성능 오버헤드가 발생할 수 있음.

사용 예시

  • 내가 직접 사용한 예시이다.

IPointerDownHandler

Cell
  • OnCellClicked 델리게이트를 구현하여 작동 될 이벤트를 사용 용도에 따라 다르게 구현.
ColorPuzzle
  • 게임 플레이를 위해 추가한 메서드
1. 기회 소모 메서드
2. 퍼즐 알고리즘 메서드
3. 퍼즐 해결 여부 판단 메서드
DevStage
  • 스테이지 제작을 위해 추가한 메서드
1. 셀 색 변경

IPointerEnterHandler

Cell
  • OnCellHovered 델리게이트를 구현하여 작동 될 이벤트를 사용 용도에 따라 다르게 구현.
StageDev
  • 마우스가 클릭 중인지 판단하는 _isHovered 변수가 true일 때, 색이 변경되는 메서드를 추가.
  • 즉 목적은 드래그임.
  • 드래그가 목적이지만 IDragHandler를 사용하지 않은 이유.
 1. IDragHandler 포인터가 눌린 상태에서 드래그 될 때를 판단하기 때문에 다른 객체에서 포인터가 눌린 상태는 판별하지 못함.
 2. 원하는 기능은 다른 객체에서 눌린 상태에서 드래그하는 기능이기 때문에 IPointerEnterHandler를 사용.
 
profile
게임 개발자가 되기 위해서 공부하는 중입니다.

0개의 댓글