UIObject Drag And Drop (UI오브젝트 드래그 앤 드랍)
간단하게 UI Object를 Drag & Drop 하는 코드를 포스팅한다.
반응형
<코드>
using UnityEngine.EventSystems;
public class Item : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IDragHandler, IDropHandler
{
private bool isDragging = false;
private Vector2 originalPointerPosition;
private Vector3 originalLocalPosition;
private Vector2 currentDragDelta;
private RectTransform canvasRectTransform;
private void Start()
{
// Canvas의 RectTransform을 가져옵니다.
canvasRectTransform = GetComponentInParent<Canvas>().GetComponent<RectTransform>();
}
public void OnPointerDown(PointerEventData eventData)
{
// 터치 시작 시 호출됩니다.
isDragging = true;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
transform.parent.GetComponent<RectTransform>(),
eventData.position,
eventData.pressEventCamera,
out originalPointerPosition);
originalLocalPosition = transform.localPosition;
}
public void OnPointerUp(PointerEventData eventData)
{
// 터치 종료 시 호출됩니다.
if (isDragging)
isDragging = false;
currentDragDelta = Vector2.zero; // 드래그 종료 시 초기화
}
public void OnDrag(PointerEventData eventData)
{
// 터치 중일 때 호출됩니다.
if (isDragging)
{
Vector2 localPointerPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
canvasRectTransform,
eventData.position,
eventData.pressEventCamera,
out localPointerPosition))
{
transform.localPosition = originalLocalPosition + (Vector3)(localPointerPosition - originalPointerPosition);
currentDragDelta = localPointerPosition - originalPointerPosition; // 드래그한 값 저장
}
}
}
public void OnDrop(PointerEventData eventData)
{
RectTransform parentRectTransform = transform.parent.GetComponent<RectTransform>();
// RectTransform의 local 좌표계로 변환
Vector2 fixedLocalPosition;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
parentRectTransform,
eventData.position,
eventData.pressEventCamera,
out fixedLocalPosition))
{
transform.localPosition = fixedLocalPosition;
}
}
}
반응형
Unity iPointerClickHandler : [링크]
RectTransformUtility -ScreenPointToLocalPointInRectangle : [링크]
★☆☆☆☆
반응형
'개발 > Unity' 카테고리의 다른 글
Unity)애니메이션 커브 반전(Animation Curve Mirror) (0) | 2023.12.28 |
---|---|
Unity) 동일한 프로젝트를 참조하는 여러 Unity 인스턴스 실행 (심볼릭 링크로 동일한 프로젝트 다중 실행) (0) | 2023.12.26 |
Unity)영상으로 녹화 하기(Editor:Recoder) (0) | 2023.12.15 |
Unity 코드) GameObject 전체 경로 찾기(부모 오브젝트 포함) (GameObject : Path) (0) | 2023.12.13 |
Unity) RectTransform 비율(%)로 Layout 처리하기 (0) | 2023.12.12 |
댓글