using JetBrains.Annotations; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using ZXKFramework; namespace DongWuYiXue.DaoNiaoShu { public class Drag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler,IPointerEnterHandler,IPointerExitHandler { public enum Group { group1, group2, group3, group4 } public string dragName; public Group group; [Header("是否拖拽")] public bool drag; [HideInInspector] public GameObject falseImage; [HideInInspector] public GameObject rightImage; [HideInInspector] public GameObject hoverImage; [HideInInspector] public GameObject dragImage; public Drag rightTarget;//正确答案 [HideInInspector] public Drag yourTarget;//您的答案 DragManager dragManager; [HideInInspector] public RectTransform rectTransform; private Vector3 startPos; private Vector2 offset; [HideInInspector] public bool right; private void Awake() { rectTransform = GetComponent(); startPos = rectTransform.localPosition; falseImage = transform.FindFirst("FalseImg"); rightImage = transform.FindFirst("RightImg"); hoverImage = transform.FindFirst("HoverImg"); dragImage = transform.FindFirst("DragImg"); } public void Init(DragManager dragManager) { this.dragManager = dragManager; ResetPos(); right = false; falseImage.SetActive(false); rightImage.SetActive(false); hoverImage.SetActive(false); dragImage.SetActive(false); yourTarget = null; } // 开始拖拽时调用 public void OnBeginDrag(PointerEventData eventData) { if (drag && !falseImage.activeSelf && !rightImage.activeSelf) { RectTransform rectTransform = transform as RectTransform; // 计算鼠标相对于 UI 元素的偏移量 offset = rectTransform.anchoredPosition - eventData.position; dragManager.drag = this; } } // 拖拽过程中调用 public void OnDrag(PointerEventData eventData) { if (drag && !falseImage.activeSelf && !rightImage.activeSelf) { dragImage.SetActive(true); hoverImage.SetActive(false); RectTransform rectTransform = transform as RectTransform; // 根据鼠标位置和偏移量更新 UI 元素的位置 rectTransform.anchoredPosition = eventData.position + offset; } } public void OnEndDrag(PointerEventData eventData) { if (drag && !falseImage.activeSelf && !rightImage.activeSelf) { dragManager.DragEnd(); dragImage.SetActive(false); } } public void ResetPos() { rectTransform.localPosition = startPos; } public void OnPointerEnter(PointerEventData eventData) { // 获取当前的 EventSystem EventSystem eventSystem = EventSystem.current; // 检查鼠标是否在 UI 上 if (eventSystem.IsPointerOverGameObject()) { if (!dragImage.activeSelf && yourTarget == null)//dragImage和hoverImage只能有一个显示 { hoverImage.SetActive(true); } } } public void OnPointerExit(PointerEventData eventData) { // 获取当前的 EventSystem EventSystem eventSystem = EventSystem.current; // 检查鼠标是否在 UI 上 if (eventSystem.IsPointerOverGameObject()) { hoverImage.SetActive(false); } } } }