👩🏻💻오늘 할 일
아이템 상호작용인벤토리 UI아이템 획득아이템 드래그 앤 드롭아이템 사용아이템 설명 표시
😵💫오늘의 트러블 슈팅
#1 OnDrop 함수가 호출되지 않는 문제
EventSystem을 이용해서 드래그 앤 드롭을 구현하기로 하였다.
드래그 관련 인터페이스를 상속받아 구현을 했는데 OnDrop() 함수가 호출되지 않는 문제를 발견했다.
인벤토리 슬롯 오브젝트를 그대로 옮기면 다른 슬롯 오브젝트 뒤에 가려지기 때문에
따로 이미지 오브젝트를 준비해서 표시하기로 하였는데 그게 원인이었다.
인벤토리 슬롯 오브젝트 위에 드래그 이미지가 같이 겹쳐지면서
EventSystems이 제대로 작동하지 않은 것이었다.
드래그를 시작할 때 raycastTarget를 꺼주고 드래그가 끝났을 때 다시 켜주니 정상적으로 작동하였다!
private void OnBeginDrag(InventorySlot cell, PointerEventData eventData)
{
if (cell.ItemData == null) return;
dragImage.sprite = cell.ItemData.Icon;
dragImage.gameObject.SetActive(true);
dragImage.transform.position = cell.transform.position;
dragCell = cell;
//이미지가 겹쳐서 EventSystem이 정상적으로 작동되지않는것을 방지
dragImage.raycastTarget = false;
}
private void OnEndDrag(InventorySlot cell, PointerEventData eventData)
{
dragCell = null;
dragImage.gameObject.SetActive(false);
//원래대로 되돌리기
dragImage.raycastTarget = true;
}
#2 아이템 설명창이 깜빡거리는 문제
마우스를 슬롯 위에 올리면 아이템의 설명이 표시되도록 구현하기로 하였다.
구현을 하고 실행해봤는데
아래와 같이 설명창이 깜빡이는 현상을 발견했다.
▼문제 영상
원인을 찾아보니
itemInfoWindow가 마우스의 OnPointerEnter & OnPointerExit 이벤트를 방해하고 있었던 것이었다.
1. 마우스가 아이템 슬롯 위에 올라감 → OnPointerEnter() 실행 → itemInfoWindow 활성화
2.itemInfoWindow 마우스 위치 위에 생성됨 → 마우스가 itemInfoWindow 감지
3.itemInfoWindow UI 요소이므로, OnPointerExit()가 실행됨 → 툴팁이 꺼짐
4.itemInfoWindow 꺼지면서 다시 아이템 슬롯 위로 마우스가 감지됨 → OnPointerEnter() 실행 → itemInfoWindow 활성화 (반복 발생, 깜빡임)
위와 같은 순서로 깜빡이게 되었고
설명창이 마우스를 방해 못하도록 위치를 떨어지게 배치하였더니 정상적으로 작동하였다!
private void OnPointerMove(ItemData data, PointerEventData eventData)
{
if (data == null) return;
//마우스가 설명창을 감지 못하게 떨어지게 배치
itemInfoWindow.transform.position = eventData.position + new Vector2(20, -20);
}
▼해결 영상
'과제' 카테고리의 다른 글
[Unity3D,C#] 게임개발 숙련 팀 프로젝트 4일차 (0) | 2025.03.19 |
---|---|
[Unity3D,C#] 게임개발 숙련 팀 프로젝트 6일차 (0) | 2025.03.19 |
[Unity3D,C#] 게임개발 숙련 팀 프로젝트 1일차 (0) | 2025.03.12 |
[Unity,C#,3D] 게임 개발 숙련 개인 과제 3일 차 (0) | 2025.03.06 |
[Unity,C#,3D] 게임 개발 숙련 개인 과제 2일 차 (0) | 2025.03.05 |