11/01

이우석·2023년 11월 1일
0

SBS 국기수업

목록 보기
67/120

인벤토리, 장비창 구현 및 드래그 앤 드랍 구현

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;
}
profile
게임 개발자 지망생, 유니티 공부중!

0개의 댓글