87 lines
2.1 KiB
C#
87 lines
2.1 KiB
C#
using UnityEngine;
|
||
using System.Collections.Generic;
|
||
|
||
/// <summary>
|
||
/// UI拖动组管理器,用于限制同时只能拖动一个UI元素
|
||
/// </summary>
|
||
public class UIDragGroup : MonoBehaviour
|
||
{
|
||
private static UIDragGroup instance;
|
||
private HashSet<UIDragHandler> dragHandlers = new HashSet<UIDragHandler>();
|
||
private UIDragHandler activeDragHandler = null;
|
||
|
||
private void Awake()
|
||
{
|
||
if (instance == null)
|
||
{
|
||
instance = this;
|
||
DontDestroyOnLoad(gameObject);
|
||
}
|
||
else
|
||
{
|
||
Destroy(gameObject);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 注册拖动处理器
|
||
/// </summary>
|
||
public static void RegisterDragHandler(UIDragHandler handler)
|
||
{
|
||
if (instance != null)
|
||
{
|
||
instance.dragHandlers.Add(handler);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取消注册拖动处理器
|
||
/// </summary>
|
||
public static void UnregisterDragHandler(UIDragHandler handler)
|
||
{
|
||
if (instance != null)
|
||
{
|
||
instance.dragHandlers.Remove(handler);
|
||
if (instance.activeDragHandler == handler)
|
||
{
|
||
instance.activeDragHandler = null;
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 开始拖动处理
|
||
/// </summary>
|
||
public static bool BeginDrag(UIDragHandler handler)
|
||
{
|
||
if (instance == null) return true;
|
||
|
||
// 如果已有活动的拖动处理器且不是当前处理器,则拒绝拖动
|
||
if (instance.activeDragHandler != null && instance.activeDragHandler != handler)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
instance.activeDragHandler = handler;
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 结束拖动处理
|
||
/// </summary>
|
||
public static void EndDrag(UIDragHandler handler)
|
||
{
|
||
if (instance != null && instance.activeDragHandler == handler)
|
||
{
|
||
instance.activeDragHandler = null;
|
||
}
|
||
}
|
||
|
||
private void OnDestroy()
|
||
{
|
||
if (instance == this)
|
||
{
|
||
instance = null;
|
||
}
|
||
}
|
||
} |