using UnityEngine;
using System.Collections.Generic;
///
/// UI拖动组管理器,用于限制同时只能拖动一个UI元素
///
public class UIDragGroup : MonoBehaviour
{
private static UIDragGroup instance;
private HashSet dragHandlers = new HashSet();
private UIDragHandler activeDragHandler = null;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
///
/// 注册拖动处理器
///
public static void RegisterDragHandler(UIDragHandler handler)
{
if (instance != null)
{
instance.dragHandlers.Add(handler);
}
}
///
/// 取消注册拖动处理器
///
public static void UnregisterDragHandler(UIDragHandler handler)
{
if (instance != null)
{
instance.dragHandlers.Remove(handler);
if (instance.activeDragHandler == handler)
{
instance.activeDragHandler = null;
}
}
}
///
/// 开始拖动处理
///
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;
}
///
/// 结束拖动处理
///
public static void EndDrag(UIDragHandler handler)
{
if (instance != null && instance.activeDragHandler == handler)
{
instance.activeDragHandler = null;
}
}
private void OnDestroy()
{
if (instance == this)
{
instance = null;
}
}
}