내일배움캠프 TIL

내일배움캠프 68일차 TIL "IPointerEnterHandler"

Jooglorystar 2024. 12. 23. 21:10

 

 

상점 기능을 구현하던 중, 특정 UI 위에 마우스 커서를 올렸을 때 아이템 정보가 뜨도록 만들고 싶었다.

관련된 정보를 찾던 중 IPointerEnterHandler 인터페이스의 존재를 알게 되었다.

 

 

IPointerEnterHandler와 그 연관된 인터페이스들은 UnityEngine.EventSystems에서 제공하는 인터페이스이다.

 

EventSystem에서 UI요소에 마우스 커서가 올라간 것을 감지할 수 있다.

 

IPointerEnterHandler와 같이 쓸만한 인터페이스는 IPointerExitHandler로, 이 인터페이스는 반대로 마우스 커서가 UI에서 빠져 나올 때를 감지할 수 있게 한다.

 

public void OnPointerEnter(PointerEventData eventData)
{
}

public void OnPointerExit(PointerEventData eventData)
{
}

 

해당 인터페이스들을 상속받으면, 각각 위의 메서드를 구현해야만 한다.

 

OnPointerEnter에 작성한 코드는 해당 메서드가 있는 UI의 위에 마우스 포인터를 올리면 작동하고, 반대로 OnPointerExit에 작성한  코드는 마우스포인터가 빠져 나오면 작동한다.

 

 

그 외의 UnityEngine.EventSystems 에서 제공하는 유용한 인터페이스는 다음과 같다.

 

IPointerDownHandler, IPointerUpHandler, IPointerClickHandler 

 

위 세 인터페이스들은 클릭 시의 메서드를 구현할 수 있는 인터페이스들이다.

PointerDown은 클릭 버튼을 눌렀을 때,

PointerUp은 클릭 버튼을 누르고 땠을 때,

PointerClick은 클릭 버튼이 완전히 동작 했을 때의 기능하게 할 수 있다.

세 인터페이스를 모두 사용했을 시, 위 순서대로 실행이된다.

 

IBeginDragHandler, IDragHandler, IEndDragHandler, IDropHandler

 

위 네 인터페이스들은 드래그시의 동작을 구현할 수 있는 인터페이스이다.

BeginDrag는 드래그 동작이 시작될 때, 

Drag는 드래그 중에 지속적으로 호출된다.

EndDrag는 드래그 동작이 끝날 때 호출되며, 

Drop은 드래그 되는 오브젝트가 이 메서드가 있는 UI에 드롭될 때 호출된다.

 

IEndDragHandler와 IDropHandler는 언듯보면 모두 드래그가 끝나는 시점에서 끝나는 것 같아 헷갈렸지만,

가장 큰 차이는 작동하는 오브젝트의 차이라고 할 수 있다.

 

예를 들어서 오브젝트 A를 드래그해서 오브젝트 B에 갖다 놓는다고 했을 때,

드래그가 끝났을 때 A에 강조처리가 되거나, 올바르지 않은 곳에 드래그 됐을 때, 원위치를 시키는 것은 IEndDragHandler

인터페이스를 사용한다.

만약 A가 B에 드래그가 정상적으로 되었을 때, B에 무언가 기능하게 하고 싶다면 IDropHandler인터페이스를 사용한다.