2025-09-08 17:37:12 +08:00

127 lines
4.0 KiB
C#

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<RectTransform>();
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);
}
}
}
}