5using System.Collections.Generic;
25 [AddComponentMenu(
"UI/Extensions/UI Scrollrect Occlusion")]
30 private ScrollRect _scrollRect;
31 private ContentSizeFitter _contentSizeFitter;
32 private VerticalLayoutGroup _verticalLayoutGroup;
33 private HorizontalLayoutGroup _horizontalLayoutGroup;
34 private GridLayoutGroup _gridLayoutGroup;
35 private bool _isVertical =
false;
36 private bool _isHorizontal =
false;
37 private float _disableMarginX = 0;
38 private float _disableMarginY = 0;
39 private bool hasDisabledGridComponents =
false;
40 private List<RectTransform> items =
new List<RectTransform>();
53 if (GetComponent<ScrollRect>() !=
null)
55 _scrollRect = GetComponent<ScrollRect>();
56 _scrollRect.onValueChanged.AddListener(
OnScroll);
58 _isHorizontal = _scrollRect.horizontal;
59 _isVertical = _scrollRect.vertical;
61 for (
int i = 0; i < _scrollRect.content.childCount; i++)
63 items.Add(_scrollRect.content.GetChild(i).GetComponent<RectTransform>());
65 if (_scrollRect.content.GetComponent<VerticalLayoutGroup>() !=
null)
67 _verticalLayoutGroup = _scrollRect.content.GetComponent<VerticalLayoutGroup>();
69 if (_scrollRect.content.GetComponent<HorizontalLayoutGroup>() !=
null)
71 _horizontalLayoutGroup = _scrollRect.content.GetComponent<HorizontalLayoutGroup>();
73 if (_scrollRect.content.GetComponent<GridLayoutGroup>() !=
null)
75 _gridLayoutGroup = _scrollRect.content.GetComponent<GridLayoutGroup>();
77 if (_scrollRect.content.GetComponent<ContentSizeFitter>() !=
null)
79 _contentSizeFitter = _scrollRect.content.GetComponent<ContentSizeFitter>();
85 Debug.LogError(
"UI_ScrollRectOcclusion => No ScrollRect component found");
89 void DisableGridComponents()
92 _disableMarginY = _scrollRect.GetComponent<RectTransform>().rect.height / 2 + items[0].sizeDelta.y;
95 _disableMarginX = _scrollRect.GetComponent<RectTransform>().rect.width / 2 + items[0].sizeDelta.x;
97 if (_verticalLayoutGroup)
99 _verticalLayoutGroup.enabled =
false;
101 if (_horizontalLayoutGroup)
103 _horizontalLayoutGroup.enabled =
false;
105 if (_contentSizeFitter)
107 _contentSizeFitter.enabled =
false;
109 if (_gridLayoutGroup)
111 _gridLayoutGroup.enabled =
false;
113 hasDisabledGridComponents =
true;
119 if (!hasDisabledGridComponents)
120 DisableGridComponents();
122 for (
int i = 0; i < items.Count; i++)
124 if (_isVertical && _isHorizontal)
126 if (_scrollRect.transform.InverseTransformPoint(items[i].position).y < -_disableMarginY || _scrollRect.transform.InverseTransformPoint(items[i].position).y > _disableMarginY
127 || _scrollRect.transform.InverseTransformPoint(items[i].position).x < -_disableMarginX || _scrollRect.transform.InverseTransformPoint(items[i].position).x > _disableMarginX)
129 items[i].gameObject.SetActive(
false);
133 items[i].gameObject.SetActive(
true);
140 if (_scrollRect.transform.InverseTransformPoint(items[i].position).y < -_disableMarginY || _scrollRect.transform.InverseTransformPoint(items[i].position).y > _disableMarginY)
142 items[i].gameObject.SetActive(
false);
146 items[i].gameObject.SetActive(
true);
152 if (_scrollRect.transform.InverseTransformPoint(items[i].position).x < -_disableMarginX || _scrollRect.transform.InverseTransformPoint(items[i].position).x > _disableMarginX)
154 items[i].gameObject.SetActive(
false);
158 items[i].gameObject.SetActive(
true);
Credit Erdener Gonenc - @PixelEnvision.