본문 바로가기
유니티/3D RPG

19 아이템 드래그/드랍

by 노오오오오옹 2020. 6. 6.

 기능

아이템을 클릭하여 원하는 인벤토리 장소에 놔둘 수 있다.

※ 참고 사항

1. 아이템을 클릭하면 해당 아이콘이 따라오고, 클릭을 해제하면 그 장소에 아이템을 둔다.

2. 마우스의 움직임에 따라 슬롯의 위치변화를 위해 InvisibleSlot을 따로 만든다. 해당 슬롯은 투명하다.

3. 아이콘의 상화좌우 위치에 따라 InvisibleSlot의 위치를 옮겨준다. 만약 좌측으로 이동한다면, InventorySlot[i-1] 번 위치에 InvisibileSlot이 들어가고 기존의 InventorySlot[i]에 InventorySlot[i-1]이 들어가게된다. 즉 [i-1]과 [i]의 위치를 스왑하는 것이다. 

 

! 주의 사항

1. 인벤토리창 밖에 두더라도 오류가 나지 않아야 한다.

 

 코드

더보기
가장 하위 클래스이다. 드래그 시작시 OnBeginDrag가 시작된다. 각 구간마다 DragManager의 함수를 실행시킨다. Drag 클래스의 경우 드래그가 가능한 슬롯에 컴포넌트로 넣어준다,
드래그 시작시 발동되는 DragManger 클래스의 BeginDrag 함수이다. 이 함수에서는 기존에 돌아가야할 위치(mOrigin)을 저장하고, 이동에 따라 InsibileSlot과 Target을 스왑한다.
드래그 중에 실시간으로 발생되는 Drag 함수이다. 먼저 인벤토리 영역안과 밖을 구분하여 위치를 정해준다.
드래그가 끝나면 발생되는 EndDrag 함수이다. 마지막으로 target이 어느 위치에 가야하는지를 정해준다.

스왑의 경우 단순히 배치 순서만 바꿔준다. 그렇게 한다면 GridLayout에 의해 자동으로 위치는 정렬되기 때문이다.

 

 구현 영상

 리펙토링

 

 

'유니티 > 3D RPG' 카테고리의 다른 글

21 스킬 시스템  (0) 2020.06.08
20 게임 최적화  (0) 2020.06.07
18 비헤이비어 트리  (0) 2020.01.20
17 퀘스트 시스템  (0) 2020.01.16
15 UI 추가/수정  (0) 2020.01.11

댓글