127 lines
4.0 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|