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