少年修仙传客户端代码仓库
lcy
2025-02-17 5c9b929047deba267b72bb8c1775865fe0362d35
10360 还原 仙匠大会滑动检测用IPointerDownHandler, IPointerUpHandler实现
1个文件已修改
55 ■■■■ 已修改文件
System/LianQi/DragSelectComponentEx.cs 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/LianQi/DragSelectComponentEx.cs
@@ -1,11 +1,12 @@
using System;
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections.Generic;
namespace vnxbqy.UI
{
    [DisallowMultipleComponent]
    public class DragSelectComponentEx : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
    public class DragSelectComponentEx : MonoBehaviour
    {
        [SerializeField] float m_Sensitive = 10f;
        [SerializeField] GameObject m_TargetObject;
@@ -17,30 +18,25 @@
        Vector3 start_position = Vector3.zero;
        bool isArea = false;
        private void OnDisable()
        {
            m_StartDrag = false;
        }
        public void OnPointerDown(PointerEventData eventData)
        private void LateUpdate()
        {
            if (Input.touchCount > 1)
            {
                m_StartDrag = false;
                return;
            }
            if (Input.GetMouseButtonDown(0))
            {
                m_StartDrag = true;
                start_position = Input.mousePosition;
                isArea = RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, start_position, CameraManager.uiCamera);
                if (!IsOverTarget())
                {
                    m_StartDrag = false;
                    return;
                }
            }
        }
        public void OnPointerUp(PointerEventData eventData)
        {
            if (Input.GetMouseButtonUp(0) && m_StartDrag)
            else if (Input.GetMouseButtonUp(0) && m_StartDrag)
            {
                var delta = Input.mousePosition - start_position;
                m_StartDrag = false;
@@ -69,5 +65,38 @@
                }
            }
        }
        // 新增目标检测方法
        private bool IsOverTarget()
        {
            if (m_TargetObject == null) return true;
            PointerEventData eventData = new PointerEventData(EventSystem.current)
            {
                position = Input.mousePosition
            };
            List<RaycastResult> results = new List<RaycastResult>();
            EventSystem.current.RaycastAll(eventData, results);
            if (results.Count > 0)
            {
                RaycastResult result = results[0];
                if (result.gameObject == m_TargetObject)
                {
                    return true;
                }
                if (result.gameObject.transform.parent.gameObject == m_TargetObject)
                {
                    return true;
                }
            }
            return false;
        }
        private void OnDisable()
        {
            m_StartDrag = false;
        }
    }
}