
상점 기능을 구현하던 중, 특정 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인터페이스를 사용한다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 내일배움캠프 70일차 TIL "Popup UI" (0) | 2024.12.26 |
|---|---|
| 내일배움캠프 69일차 TIL "Mask, Rect Mask 2D" (0) | 2024.12.24 |
| 내일배움캠프 67일차 TIL "중간발표 기능 정리" (0) | 2024.12.20 |
| 내일배움캠프 66일차 TIL "상점 기능 구상" (0) | 2024.12.19 |
| 내일배움캠프 65일차 TIL "InstanceID" (0) | 2024.12.18 |