65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
|
|
{
|
|
private Vector3 originalPosition;
|
|
private Vector3 originalScale;
|
|
private CanvasGroup canvasGroup;
|
|
|
|
private void Start()
|
|
{
|
|
canvasGroup = GetComponent<CanvasGroup>();
|
|
}
|
|
|
|
public void OnPointerDown(PointerEventData eventData)
|
|
{
|
|
var transform1 = transform;
|
|
originalPosition = transform1.position;
|
|
originalScale = transform1.localScale;
|
|
canvasGroup.alpha = 0.5f;
|
|
transform1.localScale = new Vector3(0.3f, 0.3f, 1f);
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
transform.position = Input.mousePosition;
|
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
RaycastHit hit;
|
|
if (Physics.Raycast(ray, out hit) && hit.collider.CompareTag("Ground"))
|
|
{
|
|
// 마우스가 Ground 위에 있을 때
|
|
|
|
}
|
|
}
|
|
|
|
public void OnPointerUp(PointerEventData eventData)
|
|
{
|
|
// 지형에 올바르게 드롭되지 않으면
|
|
if (!IsDroppedOnTarget())
|
|
{
|
|
var transform1 = transform;
|
|
transform1.position = originalPosition;
|
|
transform1.localScale = originalScale;
|
|
canvasGroup.alpha = 1;
|
|
}
|
|
}
|
|
|
|
private bool IsDroppedOnTarget()
|
|
{
|
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
RaycastHit hit;
|
|
|
|
if (Physics.Raycast(ray, out hit))
|
|
{
|
|
if (hit.collider.CompareTag("Ground"))
|
|
{
|
|
Destroy(gameObject);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|