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<ScrollRect>(); 
 | 
                } 
 | 
                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); 
 | 
        } 
 | 
    } 
 |