인벤토리, 장비창 구현 및 드래그 앤 드랍 구현
public void OnBeginDrag(PointerEventData eventData)
{
if(_draggingObject != null)
{
Destroy(_draggingObject);
}
if(_icon.enabled == false)
{
Destroy(_draggingObject);
}
// 드래그 중인 아이콘 생성
_draggingObject = new GameObject("Dragging Object");
_draggingObject.transform.SetParent(_icon.canvas.transform); // 드래그 아이콘을 해당 캔버스에 종속
_draggingObject.transform.SetAsLastSibling(); // 하이어라키상 가장 아래 위치에 생성 = 최상위에 그려짐
_draggingObject.transform.localScale = Vector3.one;
CanvasGroup canvasGroup = _draggingObject.AddComponent<CanvasGroup>();
canvasGroup.blocksRaycasts = false; // 레이케스트 블록 속성을 블록되지 않도록 한다.
Image dragIcon = _draggingObject.AddComponent<Image>();
dragIcon.sprite = _icon.sprite;
dragIcon.color = _icon.color;
dragIcon.material = _icon.material;
dragIcon.rectTransform.sizeDelta = _icon.rectTransform.sizeDelta;
_canvasTransform = (RectTransform)dragIcon.canvas.transform; // 드래그 중인 아이콘의 위치 설정
UpdateDraggingObjectPosition(eventData);
}
public void OnDrag(PointerEventData eventData)
{
// 드래그 중인 아이콘의 위치 설정
UpdateDraggingObjectPosition(eventData);
}
public void OnEndDrag(PointerEventData eventData)
{
Destroy(_draggingObject);
}
public void OnDrop(PointerEventData eventData)
{
// ItemType과 EquipSlotKind를 비교해서 체크
if (eventData.dragging == false)
{
return;
}
Image dragImage = eventData.pointerDrag.transform.GetChild(0).GetChild(1).GetComponent<Image>();
SetSlotInfo(dragImage.sprite);
_slotIcon.color = dragImage.color;
_slotIcon.material = dragImage.material;
_slotBG.color = _originColor;
}
public void OnPointerEnter(PointerEventData eventData)
{
// ItemType과 EquipSlotKind를 비교해서 체크
if (eventData.dragging == false)
{
return;
}
_slotBG.color = _enterColor;
}
public void OnPointerExit(PointerEventData eventData)
{
// ItemType과 EquipSlotKind를 비교해서 체크
if (eventData.dragging == false)
{
return;
}
_slotBG.color = _originColor;
}