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; } } }