Deff_Dev
[Unity/C#] 이벤트 호출 안될 때 본문
유니티에서는 다양한 이벤트를 지원하는데, 게임 오브젝트에 클릭(터치) 이벤트를 적용시킬 때, 이벤트 함수 호출안되는 경우가 있다.
using UnityEngine;
using UnityEngine.EventSystems;
public class UnitTile : MonoBehaviour, IDragHandler, IPointerClickHandler, IEndDragHandler
{
public void OnDrag(PointerEventData eventData)
{
Debug.Log($"타일 드래그중...");
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log($"타일 터치 ");
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log($"타일 터치 해체 ");
}
}
이때 두 가지를 확인해보면 된다.
1. Hierarchy에 EventSystem이 존재하는지 확인하고, 없다면 우클릭 후 UI 탭에서 생성한다.
2. 게임 오브젝트에 이벤트 함수를 호출 할 때,
- 3D ▶ MainCamera에 Physics RayCaster가 붙어있는지 확인하 없다면 컴포넌트를 추가한다.
- 2D ▶ MainCamera에 Physics 2D RayCaster가 붙어있는지 확인하 없다면 컴포넌트를 추가한다.
- 다른 오브젝트가 충돌되지 않도록 Event Mask를 설정한다.
위 두 가지만 확인해본다면 이벤트 호출이 정상적으로 될 것이다.
여기서 이벤트 함수를 게임 오브젝트가 아닌 UI에 넣는다면 MainCamera에 Physics RayCaster를 추가하지 않아도 이벤트가 호출 될 것이다.
왜 그럴까 ?
이 글의 내용은 OnPointerEnter, Exit는 UI에만 적용된다는 글이다.
하지만 댓글을 본다면 UI에만 적용되는 이유와, 게임 오브젝트에 반응할려면 어떻게 해야하는지 나와있다.
일단 이유는 기본적으로 Canvas를 생성하면 기본적으로 Graphic Raycaster가 붙어 있기 때문에 UI에는 해당 이벤트 함수들이 반응을 하는 것이다. ( Graphic Raycaster의 구성요소를 사용하여 이벤트를 호출)
그렇기 때문에 UI가 아닌 게임 오브젝트에서 이벤트 함수들을 호출할려면 MainCamera에 Physics RayCaster/ Physics 2D RayCaster 를 추가해서 이벤트 함수를 호출해야한다.
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 어드레서블 (Addressable) (0) | 2024.07.06 |
---|---|
[Unity/C#] foreach문에서 컬렉션 수정할 때, 생기는 오류 (0) | 2024.07.04 |
[Unity/C#] 일반화 프로그래밍 (Generic) (0) | 2024.06.29 |
[Unity/C#] AudioMixer를 이용한 볼륨 조절 (0) | 2024.06.26 |
[Unity/C#] 확률 구하기 (0) | 2024.06.24 |