드래그 앤 드랍

Noke·2025년 6월 10일

Unity TIL

목록 보기
22/31

유니티에서 드래그 앤 드랍은 어떤 식으로 구현하는 것일까?

오늘은 유니티에서 드래그 앤 드랍을 구현하는 방법에 대해 알아볼 것이다.


🎠 드래그 앤 드랍 인터페이스

사실 드래그 앤 드랍 구현은 되게 쉽다.

인터페이스를 상속받고 해당하는 메서드를 구현해주면 된다.

IBeginDragHandler, IDragHandler, IEndDragHandler, IDropHandler

위는 순서대로, 드래그가 시작될 때, 드래그 중, 드래그가 끝났을 때, 드랍이 되었을 때에 대한 메서드를 담고 있는 인터페이스이다.

즉, 위와 관련된 인터페이스를 본인이 생각한 기능에 맞게 구현하면 되는 것이다.


✅ 예제 : 인벤토리 교체

// 드래그 시작 시
public void OnBeginDrag(PointerEventData eventData)
{
    if (IsEmpty) return;

    startPos = itemImg.transform.position;

    InventoryUI.dragging = this;

    itemImg.transform.SetParent(draggingParent);
}

// 드래그 중
public void OnDrag(PointerEventData eventData)
{
    if (IsEmpty) return;

    itemImg.transform.position = Input.mousePosition;
}

// 드래그 끝
public void OnEndDrag(PointerEventData eventData)
{
    if (IsEmpty) return;

    InventoryUI.dragging = null;

    itemImg.transform.SetParent(gameObject.transform);
    itemImg.transform.position = startPos;
}

// 드랍 시
public void OnDrop(PointerEventData eventData)
{
    if (!IsEmpty)
    {
        ItemEntry temp = entry;
        SetSlot(InventoryUI.dragging.entry);
        InventoryUI.dragging.SetSlot(temp);
    }
    else
    {
        SetSlot(InventoryUI.dragging.entry);
        InventoryUI.dragging.ClearSlot();
    }
}

모든 코드를 설명하기 위해서는 내 프로젝트의 더 많은 코드가 필요하기 때문에 참고용으로만 보면 좋을 것이다.

중요한 점은 드랍과 드래그 종료에 대한 메서드가 따로 존재하기 때문에 헷갈리지 않고 잘 사용해야 한다.


✨ 마무리

이번 과제가 참 쉽지가 않은데, 여러 기능을 많이 배우고 있어서 뭔가 뿌듯하다.

또한, 드래그 앤 드랍이 생각보다 자잘한 오류가 많이 뜨기 때문에 TIL 작성이 끝나면 오류를 고치러 가야겠다.

profile
유니티 개발자(진)

0개의 댓글