77 lines
2.8 KiB
C#
77 lines
2.8 KiB
C#
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
|
|
public class DragChip : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
|
|
{
|
|
public GameObject chipPrefab;
|
|
public Image rouletteBoardImage;
|
|
|
|
private RectTransform canvasRect;
|
|
private RectTransform chipRect;
|
|
private Vector2 originalPosition;
|
|
private GameObject currentChip;
|
|
private Canvas canvas;
|
|
|
|
void Start()
|
|
{
|
|
// Get the RectTransform component of the canvas
|
|
canvasRect = GetComponentInParent<Canvas>().GetComponent<RectTransform>();
|
|
// Get the Canvas component of the parent object
|
|
canvas = GetComponentInParent<Canvas>();
|
|
}
|
|
|
|
public void OnBeginDrag(PointerEventData eventData)
|
|
{
|
|
// Create a clone of the chip image at the current position
|
|
currentChip = Instantiate(chipPrefab, transform.position, Quaternion.identity, canvas.transform);
|
|
// Get the RectTransform component of the clone
|
|
chipRect = currentChip.GetComponent<RectTransform>();
|
|
// Store the original position of the clone before dragging
|
|
originalPosition = chipRect.anchoredPosition;
|
|
// Bring the clone to the front
|
|
chipRect.SetAsLastSibling();
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
// Move the clone with the mouse drag movement
|
|
chipRect.anchoredPosition += eventData.delta / canvas.scaleFactor;
|
|
}
|
|
|
|
public void OnEndDrag(PointerEventData eventData)
|
|
{
|
|
// If the clone exists, check if it's dropped onto the roulette board image
|
|
if (currentChip != null)
|
|
{
|
|
RectTransform boardRect = rouletteBoardImage.GetComponent<RectTransform>();
|
|
Vector2 localMousePos;
|
|
// Check if the mouse position is within the bounds of the roulette board image
|
|
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(boardRect, Input.mousePosition, canvas.worldCamera, out localMousePos))
|
|
{
|
|
if (boardRect.rect.Contains(localMousePos))
|
|
{
|
|
// If the chip is dropped onto the roulette board image, set its parent to the image and position it at the mouse cursor
|
|
chipRect.SetParent(rouletteBoardImage.transform);
|
|
chipRect.anchoredPosition = localMousePos;
|
|
}
|
|
else
|
|
{
|
|
// If the chip is dropped outside of the roulette board image, destroy it
|
|
Destroy(currentChip);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If the mouse position is not within the bounds of the canvas, destroy the clone
|
|
Destroy(currentChip);
|
|
}
|
|
|
|
// Set the clone to null to indicate that it no longer exists
|
|
currentChip = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
|