[유니티] IPointerHandler 인터페이스가 작동하지 않는 이유
유니티에서 마우스가 오브젝트에 진입하거나 클릭함에 따라 원하는 동작을 하게 만들고 싶은 경우 편리하게 사용할 수 있는 것이 IPointerHandler 인터페이스이다.
C#에서 인터페이스는 MonoBehaviour와 같이 상속하고 인터페이스 안에 존재하는 추상화 함수를 구현하면 사용할 수 있다.
대표적인 IPointerHandler는 오브젝트의 내부에 마우스 포인터가 들어왔는지 파악하는 IPointerEnterHandler이다.
이 인터페이스를 사용하기 위해서는 void OnPointerEnter() 함수를 구현해야한다.
오브젝트에 마우스 포인터를 올리면 윤곽선이 드러나는 코드를 살펴보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
public class ElevatorManager : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public GameObject shadow;
private void Start()
{
shadow.SetActive(false);
}
public void OnPointerEnter(PointerEventData eventData)
{
shadow.SetActive(true);
}
public void OnPointerExit(PointerEventData eventData)
{
shadow.SetActive(false);
}
}
|
cs |
일단 IPointerHandler를 코드에 불러오기 위해서 일단 UnityEngine.EventSystems 를 using 선언해주자.
IPointerHandler 인터페이스의 추상 함수를 구현할 때 PointerEventData를 매개변수로 설정해주어야 한다.
이제 오브젝트에 코드를 적용하고 마우스를 올리면 shadow가 나타나고, 마우스를 내리면 shadow가 사라진다.
하지만, IPointerHandler가 작동하지 않는 경우 다음을 확인해보자.
1. 스크립트가 적용된 Object에 Box Collider/ Collider 2D component가 적용된 지 확인하자.
적용이 되었다면 해당 collider의 크기를 오브젝트에 맞게 변경해주어야 마우스 이벤트가 제대로 동작한다.
2. UI 생성 시 같이 생성되는 EventSystem 오브젝트가 Scene안에 생성되었는지 확인하자.
3. Camera에 Physics Raycaster Component가 부착되어 있는지 확인하자.
IPointerHandler에는 마우스로 드래그하거나 클릭하는 동작도 감지할 수 있으므로 자세한 내용은 아래를 확인해보자.
https://docs.unity3d.com/kr/530/Manual/SupportedEvents.html
유니티 - 매뉴얼: 지원하고 있는 이벤트
지원하고 있는 이벤트 Eventsystem은 많은 이벤트를 지원하고 있으며, InputModule을 작성하여 사용자 정의 할 수 있습니다. 이벤트는 인터페이스가 제공하는 StandaloneInputModule과 TouchInputModule에 지원되
docs.unity3d.com