好的我们的交换来了 交换其实并不难 只需要使用System.Action传出事件然后在需要修改数据的地方接受事件,贴代码,这是一个通用的东西 你加到哪个玩意上面做他的脚本都能拖拽这个玩意
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class JiaohuanComponent : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler
{
public System.Action<object, bool> OnDragEvent = null;
public System.Action<object, bool> OnEndDragEvent = null;
public System.Action<object, bool> OnPointerEnterEvent = null;
public System.Action<object, bool> OnPointerExitEvent = null;
[HideInInspector]
public Vector3 yuanshiweizhi;
[HideInInspector]
public object m_aObject = null;
public MaskableGraphic m_aGraphics;
public void OnDrag(PointerEventData eventData)
{
SetDraggedPosition(eventData);
if(m_aObject!=null)
OnDragEvent?.Invoke(m_aObject, true);
}
public void OnBeginDrag(PointerEventData eventData)
{
yuanshiweizhi = transform.position;
SetDraggedPosition(eventData);
transform.SetAsLastSibling();
m_aGraphics.raycastTarget = false;
}
public void OnEndDrag(PointerEventData eventData)
{
transform.position = yuanshiweizhi;
if (m_aObject != null)
OnEndDragEvent?.Invoke(m_aObject, false);
m_aGraphics.raycastTarget = true;
}
public void OnPointerEnter(PointerEventData eventData)
{
if (m_aObject != null)
OnPointerEnterEvent?.Invoke(m_aObject, true);
}
public void OnPointerExit(PointerEventData eventData)
{
if (m_aObject != null)
OnPointerExitEvent?.Invoke(m_aObject, false);
}
private void SetDraggedPosition(PointerEventData eventData)
{
RectTransform rt = gameObject.GetComponent<RectTransform>();
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle
(rt, eventData.position, eventData.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
}
}
}
|