Files
JJBB/Assets/Project/Script/GUI/Base/UiDragComponent.cs
2024-08-23 15:49:34 +08:00

81 lines
2.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
/// <summary>
/// 接受拖动操作的Ui底层组件Unity原生接口需要额外处理一些释放的问题
/// </summary>
public class UiDragComponent : MonoBehaviour, IDragHandler, IPointerDownHandler, IPointerUpHandler
{
/// <summary>
/// 当前操作的手指Id
/// </summary>
public int? CurrentPointerId { get; private set; }
/// <summary>
/// 上次移动的缓存位置
/// </summary>
public Vector2 lastPoint { get; private set; }
/// <summary>
/// 手指从一点移动到下一点
/// </summary>
public event UnityAction<Vector2, Vector2> onDrag;
/// <summary>
/// 手指按下操作
/// </summary>
public event UnityAction<Vector2> onPress;
/// <summary>
/// 手指抬起操作
/// </summary>
public event UnityAction<Vector2> onUp;
private void OnDisable()
{
Release();
}
private void OnApplicationFocus(bool hasFocus)
{
if (!hasFocus)
Release();
}
public void OnPointerDown(PointerEventData eventData)
{
if (CurrentPointerId == null)
{
CurrentPointerId = eventData.pointerId;
lastPoint = eventData.position;
if (onPress != null)
onPress(lastPoint);
}
}
public void OnDrag(PointerEventData eventData)
{
if (CurrentPointerId == eventData.pointerId)
{
if (onDrag != null)
onDrag(lastPoint, eventData.position);
lastPoint = eventData.position;
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (CurrentPointerId == eventData.pointerId)
{
lastPoint = eventData.position;
Release();
}
}
public void Release()
{
var temp = CurrentPointerId;
CurrentPointerId = null;
if (temp != null)
{
if (onUp != null)
onUp(lastPoint);
}
}
}