14 [AddComponentMenu(
"UI/Extensions/UI ScrollTo Selection XY")]
15 [RequireComponent(typeof(ScrollRect))]
25 private RectTransform layoutListGroup =
null;
28 private RectTransform targetScrollObject;
29 private bool scrollToSelection =
true;
32 private RectTransform scrollWindow =
null;
33 private ScrollRect targetScrollRect =
null;
39 targetScrollRect = GetComponent<ScrollRect>();
40 scrollWindow = targetScrollRect.GetComponent<RectTransform>();
46 ScrollRectToLevelSelection();
49 private void ScrollRectToLevelSelection()
52 var events = EventSystem.current;
55 bool referencesAreIncorrect =
56 (targetScrollRect ==
null || layoutListGroup ==
null || scrollWindow ==
null);
57 if (referencesAreIncorrect ==
true)
63 RectTransform selection = events.currentSelectedGameObject !=
null ?
64 events.currentSelectedGameObject.GetComponent<RectTransform>() :
67 if (selection != targetScrollObject)
69 scrollToSelection =
true;
73 bool isScrollDirectionUnknown = (selection ==
null || scrollToSelection ==
false);
75 if (isScrollDirectionUnknown ==
true || selection.transform.parent != layoutListGroup.transform)
80 bool finishedX =
false, finishedY =
false;
82 if (targetScrollRect.vertical)
85 float selectionPos = -selection.anchoredPosition.y;
87 float listPixelAnchor = layoutListGroup.anchoredPosition.y;
90 float offlimitsValue = 0;
92 offlimitsValue = listPixelAnchor - selectionPos;
94 targetScrollRect.verticalNormalizedPosition += (offlimitsValue / layoutListGroup.sizeDelta.y) * Time.deltaTime *
scrollSpeed;
96 finishedY = Mathf.Abs(offlimitsValue) < 2f;
99 if (targetScrollRect.horizontal)
102 float selectionPos = -selection.anchoredPosition.x;
104 float listPixelAnchor = layoutListGroup.anchoredPosition.x;
107 float offlimitsValue = 0;
109 offlimitsValue = listPixelAnchor - selectionPos;
111 targetScrollRect.horizontalNormalizedPosition += (offlimitsValue / layoutListGroup.sizeDelta.x) * Time.deltaTime *
scrollSpeed;
113 finishedX = Mathf.Abs(offlimitsValue) < 2f;
116 if (finishedX && finishedY) {
117 scrollToSelection =
false;
120 targetScrollObject = selection;
Credit Erdener Gonenc - @PixelEnvision.