using System;
using UnityEngine;
using UnityEngine.EventSystems;
public class MainDrag : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
private bool isEnd;
private bool isSelect;
public bool closeDrag { get; set; }
private Vector2 lastPos;
private RectTransform mainRect;
private Vector2 mainStarRectPos;
public RectTransform targetRect;
public Action<MainDrag> onDragBegin = drag => { };
public Action<MainDrag,Vector2> onDragAlways = (mainDrag,vector) => { };
public Action<MainDrag,Vector2> onDragEnd = (mainDrag,vector) => { };
private void Start()
{
mainRect = transform as RectTransform;
mainStarRectPos = mainRect.anchoredPosition;
}
private void Update()
{
if (!isSelect)
{
return;
}
mainRect.anchoredPosition = mainStarRectPos + (GameManager.Main.GetPos() - lastPos);
onDragAlways(this,mainRect.anchoredPosition);
}
public void OnPointerDown(PointerEventData eventData)
{
if (isEnd || closeDrag)
{
return;
}
isSelect = true;
lastPos = GameManager.Main.GetPos();
onDragBegin(this);
}
public void OnPointerUp(PointerEventData eventData)
{
if (isEnd || closeDrag)
{
return;
}
isSelect = false;
onDragEnd(this,mainRect.anchoredPosition);
}
public void Back()
{
mainRect.anchoredPosition = mainStarRectPos;
}
public void SetPos(Vector2 pos)
{
mainStarRectPos = pos;
mainRect.anchoredPosition = pos;
}
public void SetEnd(bool isEnd = true)
{
this.isEnd = isEnd;
}
public void SetEndPos(Vector2 pos)
{
mainRect.anchoredPosition = pos;
isEnd = true;
}
public void SetSelect(bool select = false)
{
isSelect = select;
}
}
Unity 屏幕中需要拖动的UI及其回调:MainDrag
最新推荐文章于 2024-03-19 18:30:01 发布