Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
유니티에서 마우스가 오브젝트에 진입하거나 클릭함에 따라 원하는 동작을 하게 만들고 싶은 경우 편리하게 사용할 수 있는 것이 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
'개발 > Unity' 카테고리의 다른 글
[Unity] 유니티에서 테스트 주도 개발(TDD) 적용하기 (0) | 2022.04.17 |
---|---|
[Unity] C# enum(열거형) 활용하기 (0) | 2022.02.08 |
[유니티] Coroutine으로 Update 대체하기 (Update 최적화) (0) | 2022.01.18 |
[유니티] Instantiate로 인한 Awake와 Start의 차이 확인하기 (0) | 2022.01.15 |
[Unity] 유니티에서의 다중 상속과 다이아몬드 문제 (2) | 2022.01.05 |