[Unity] UnityEngine.EventSystems의 interface API
IBeginDragHandler
- OnBegineDrag 콜백들을 수신할 때 구현하는 인터페이스
- IBegineDragHandler에 추가적으로 IDragHandler를 구현해야한다.
- 구성
- OnBeginDrag: 드래그가 시작되기 전에 BaseInputModule에 의해 호출 됨.
ICancelHandler
- OnCancel 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnCancel: Cancel 이벤트가 발생했을 때 BaseInputModule에 의해 호출 됨.
IDeselectHandler
- OnDeselect 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnDeselect: 새 오브젝트가 선택될 때 EventSytem에 의해 호출 됨.
IDragHandler
- OnDrag 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnDrag: 드래그가 발생할 때, OnDrag는 커서가 움직이는 모든 순간에 호출 됨.
IDropHandler
- OnDrop 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnDrop: Drop을 받아들일 수 있는 타겟 BaseInputModule에 의해 호출 됨.
IEndDragHandler
- OnEndDrag 콜백들을 수신할 때 구현하는 인터페이스
- IEndDragHandler에 추가적으로 IDragHandler를 구현해야한다.
- 구성
- OnEndDrag: 드래그가 끝났을 때 BaseInputModule에 의해 호출 됨.
IEventSystemHandler
- 모든 EventSystem 이벤트들이 상속받은 베이스 클래스
IInitializePotentialDragHandler
- OnInitializePotentialDrag 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnInitialPotentialDrag: 드래그가 감지되지만 드래그가 시작한다고 판단하기 전에 BaseInputModule에 의해 호출 됨.
IMoveHandler
- OnMove 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnMove: move 이벤트가 발생할 때 BaseInputModule에 의해 호출 됨. Selectable 객체가 OnSelect 호출된 상태로 화살표 혹은 Tab등 이동 Action이 설정된 키를 누를 때 호출 됨.
IPointerClickHandler
- OnPointerClick 콜백들을 수신할 때 구현하는 인터페이스
- OnPointerClick 콜백들을 사용하여 클릭 입력을 다루기 위해 IPointerClickHandler 인터페이스를 사용
- 이벤트 시스템이 클릭 감지를 용인하기 위해 씬에서 존재한다는 것을 보장한다.
- 논UI 게임오브젝트들에 클릭을 감지하기 위해, PhysicsRaycaster가 카메라에 붙어있어야 한다.
- 구성
- OnPointerClick: 클릭들을 감지하기 위해 콜백 사용.
IPointerDownHandler
- OnPointerDown 콜백들을 수신할 때 구현하는 인터페이스
- 마우스 버튼을 놓기 전까지 잰행중인 마우스 클릭들을 감지한다.
- 마우스 버튼을 놓는 것을 다루기 위해 IPointerUpHandler를 사용.
- 구성
- OnPointerDown
IPointerEnterHandler
- OnPointerEnter 콜백들을 수신할 때 구현하는 인터페이스
- 마우스가 확실한 게임 오브젝트 위를 맴돌기 시작할 때 감지하기 위해 사용.
- 마우스가 게임 오브젝트 위를 맴돌기를 멈췄을 때를 감지하기 위해 IPointerExitHandler를 사용.
- 구성
- OnPointerEnter
IPointerExitHandler
- OnPointerExit 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnPointerExit
IPointerUpHandler
- OnPointerUp 콜백들을 수신할 때 구현하는 인터페이스
- OnPointerUp 콜백을 받기 위해, IPointerDownHandler 인터페이스를 구현해야 한다.
- 구성
- OnPointerUp
IScrollHandler
- OnScroll 콜백들을 수신할 때 구현하는 인터페이스
- 위에 맴도는 상태로 스크롤링을 할 때 호출 됨.
- 구성
- OnScroll: 위에 맴도는 상태로 스크롤링을 할 때 호출.
ISelectHandler
- OnSelect 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnSelect: Selectable 객체들 중에서 선택되었을 때 호출. 다른 객체를 선택하였을 때 OnDeselect가 호출 됨.
ISubmitHandler
- OnSubmit 콜백들을 수신할 때 구현하는 인터페이스
- 구성
- OnSubmit
IUpdateSelectedHandler
- OnUpdateSelected 콜백들을 수신 할 때 구현하는 인터페이스
- 구성
- OnUpdateSelected: 오브젝트가 EventTrigger가 업데이트 된다는 것과 연관 되었을 때 이벤트 시스템에 의해 호출 됨. OnSelect 호출이 된 이후 매순간 호출.
자체 정리
< 선택 관련 >
과정: Selectable 객체1 선택 > non Selectable 객체 2 선택 > Selectable 객체 3 선택 > 배경 선택
1. 객체 1의 OnSelect 1회 호출
2. 객체 1의 OnUpdateSelected 호출 지속
3. 객체 1의 OnDeselect 1회 호출
4. 객체 3의 OnSelecct 1회 호출
5. 객체 3의 OnUpdateSelected 호출 지속
6. 객체 3의 OnDeselect 1회 호출
< 클릭/터치 관련(Editor 환경) >
과정: 객체 1 클릭/터치 다운 > 객체 1 클릭/터치 업
1. 객체 1의 OnPointerDown 1회 호출
2-1. 객체 1의 OnPointerUp 1회 호출
2-2. 객체 1의 OnPointerClick 1회 호출
만약 UI가 아닌 3D객체에 이 인터페이스들을 붙이고 이를 감지하고 싶다면, PhysicsRaycaster가 화면 카메라에 붙어있어야 함.
과정: 객체 1 위로 진입 > 객체 1 위에 스크롤링 > 객체 1 위에서 이탈
1. 객체 1의 OnPointerEnter 1회 호출
2. 객체 1의 OnScroll 1회 호출
3. 객체 1의 OnPointerExit 1회 호출
과정: 객체 1에서 드래그 시작 > 객체 2 위에서 드래그 종료
1. 객체 1의 OnBeginDrag 1회 호출
2. 객체 1의 OnDrag 지속 호출
3-1. 객체 2의 OnDrop 1회 호출
3-2. 객체 1의 OnEndDrag 1회 호출
< Submit과 Cancel >
Inputfield에서 작성을 하고 난 직후에는 엔터(Submit 액션) 혹은 esc(Cancel 액션)을 눌러도 Inputfield가 붙은 객체의 OnSubmit이나 OnCancel이 호출되지 않는다. 엔터나 esc키를 한 번 눌러 커서가 비활성화된 상태로 다시 한 번 눌러야 OnSubmit 혹은 OnCancel이 호출된다. 이로 인해 값을 수정하는 중에는 콜백들이 발생하지 않고 수정이 종료되고 값이 지정된 상태가 되서야 발생한다는 것을 알 수 있다.
< 현재 객체가 intercept하는 이벤트 확인 >
인스펙터 창의 하단에 Intercepted Events 탭을 선택하면 그림과 같이 어떤 컴포넌트가 어떤 이벤트들을 인터셉트를 했는지 알 수 있다.