🐧 들어가기 앞서

팀 과제 시작..

그리고 아이앱 반팔 당첨됐다! 🐧

하지만

작업하던게 맘에 안들어서 여러번 날리고, 다시 태초마을로 돌아왔다...


🐧 오늘 배운 것

  1. Drag & Drop

🐧 기억할 것 & 진행

Drag

Unity에서는 드래그를 할 수 있는 기능이 이미 인터페이스로 구현되어있다!

IBeginDragHandler는 드래그 시작, -> OnBeginDrag()

IDragHandler는 드래그 상태, -> OnDrag()

IEndDragHandler는 드래그 끝을 의미한다. -> OnEndDrag()

따라서, 지정해준 변수를 가지고 자유롭게 드래그 상태에서 행동을 정의할 수 있다!

Drop

Drop도 마찬가지다. IDopHandler는 드래그 후 놓아지는 상태를 인터페이스로 구현되어있는데,

OnDrop() 메서드를 이용해 매개변수를 활용하여 이벤트를 처리할 수 있다! 매우 편리하다.


🐧 게임에 구현한다면?

  • Draggable.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    [SerializeField] public int from;

    private RectTransform rectTransform;
    private CanvasGroup canvasGroup;
    private Vector3 originPositions;
    public void OnBeginDrag(PointerEventData eventData)
    {
        //Debug.Log("OnBeginDrag");
        canvasGroup.blocksRaycasts = false;
        canvasGroup.alpha = 0.7f;

    }

    public void OnDrag(PointerEventData eventData)
    {
        rectTransform.anchoredPosition += eventData.delta;
        //Debug.Log("OnDrag");
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        //Debug.Log("OnEndDrag");
        rectTransform.anchoredPosition = originPositions;
        canvasGroup.blocksRaycasts = true;
        canvasGroup.alpha = 1.0f;
    }

    public void SetOriginalPosition(Vector3 newPositions)
    {
        originPositions = newPositions;
    }

    void Start()
    {
        rectTransform = GetComponent<RectTransform>();
        canvasGroup = GetComponent<CanvasGroup>();
        originPositions = rectTransform.anchoredPosition;
    }
    void Update()
    {
        
    }
}
  • Droppable.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Droppable : MonoBehaviour, IDropHandler
{
    [SerializeField] private int to;
    public void OnDrop(PointerEventData eventData)
    {
        Draggable dragged = eventData.pointerDrag.GetComponent<Draggable>();

        switch (dragged.from)
        {
            case 1:
                switch (to)
                {
                    case 1:
                        Destroy(dragged);
                        break;
                }
                break;
        }

        Debug.Log(string.Format("dragged {0} to {1}", dragged.from, to));
        dragged.SetOriginalPosition(GetComponent<RectTransform>().anchoredPosition);
    }

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

🐧 내일 할 일

타워 객체 생성하기

0개의 댓글