using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; [RequireComponent(typeof(ScrollRect))] public class NestingScrollRect : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { [SerializeField] ScrollRect m_ParentScrollRect; ScrollRect m_ScrollRect; ScrollRect scrollRect { get { if (m_ScrollRect == null) { m_ScrollRect = GetComponent(); } return m_ScrollRect; } } public void OnBeginDrag(PointerEventData eventData) { m_ParentScrollRect.OnBeginDrag(eventData); } public void OnDrag(PointerEventData eventData) { float angle = Mathf.Abs(Vector2.Angle(eventData.delta, Vector2.up)); if (angle >= 45 && angle <= 135) { m_ParentScrollRect.enabled = m_ParentScrollRect.horizontal; scrollRect.enabled = scrollRect.horizontal; } else { m_ParentScrollRect.enabled = m_ParentScrollRect.vertical; scrollRect.enabled = scrollRect.vertical; } m_ParentScrollRect.OnDrag(eventData); } public void OnEndDrag(PointerEventData eventData) { scrollRect.enabled = true; m_ParentScrollRect.enabled = true; m_ParentScrollRect.OnEndDrag(eventData); scrollRect.OnEndDrag(eventData); } }