반응형
짤처럼 음식을 드래그 해서 손님한테 주는 시스템을 만들었다.
// 음식 오브젝트에 넣은 코드
public class FoodController : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler
{
Vector3 DefaultPos;
// 드래그 시작
void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
{
// 올바르지 않은 곳에 드래그 했을 때 돌아갈 위치를 저장해준다
DefaultPos = this.transform.position;
// 드래그 시작 되었을 때는 드래그 중인 오브젝트의 레이캐스트 타겟을 꺼줘야 오류가 생기지 않는다
GetComponent<Image>().raycastTarget = false;
}
// 드래그 중
void IDragHandler.OnDrag(PointerEventData eventData)
{
// 현재 터치되고 있는 좌표를 저장해서 오브젝트가 손가락을 따라갈 수 있도록 오브젝트의 좌표로 넣어준다
Vector3 currentPos = Camera.main.ScreenToWorldPoint(eventData.position);
// 이렇게 넣어주지 않으면 오브젝트가 이상한 곳에 위치하길래 조정해주었다
// 원인을 아시는 분은 댓글로 알려주시면 감사하겠습니다
currentPos.z = 90f;
currentPos.y -= 160f;
this.transform.position = currentPos;
}
// 드래그 끝
void IEndDragHandler.OnEndDrag(PointerEventData eventData)
{
// 손님 오브젝트에서 음식 오브젝트에 대한 처리를 하고 오브젝트를 제거한다
// 제거되지 않았다면 올바르지 않은 곳에 드롭된 것이기 때문에 원래 위치로 돌려준다
this.transform.position = DefaultPos;
// 레이캐스트 타겟도 원래대로 돌려준다
GetComponent<Image>().raycastTarget = true;
}
}
// 손님 오브젝트에 넣은 코드
public class SeatController : MonoBehaviour, IDropHandler
{
public Text dialogue;
public GameObject heartImg;
public string residentName;
// 오브젝트가 드롭되었을 시 호출되는 함수
public void OnDrop(PointerEventData eventData)
{
// eventData.pointerDrag로 드롭된 오브젝트를 가져올 수 있다
// 원하는 코드를 짠다
// 원하는 행동을 한 후 음식 오브젝트를 제거한다
Destroy(eventData.pointerDrag);
}
}
using UnityEngine.EventSystems; 을 해줘야 드래그, 드롭 함수를 사용할 수 있다.
드래그 할 오브젝트에는 IBeginDragHandler, IEndDragHandler, IDragHandler를, 드롭 할 오브젝트에는 IDropHandler를 넣어줘야 한다.
반응형
'프로그래밍 > 유니티 및 C#' 카테고리의 다른 글
[유니티/C#] csv 파일을 원하는 타입으로 읽기(Generic 사용) (0) | 2023.11.08 |
---|---|
[유니티/C#] Scroll View에 유동적인 Text 넣기 (0) | 2023.11.07 |
[유니티/C#] Json을 원하는 타입으로 읽기/쓰기 (Generic 사용) (0) | 2023.11.03 |
[유니티/C#] Text 길이에 맞춰 늘어나는 패널 만들기 (0) | 2023.11.02 |
[유니티/C#] List에서 중복 없이 뽑기(조합) (0) | 2023.10.30 |