private void SetFocusAtIntrnalElement(int axis, float delta) { if (focusInternal) { bool positive = delta >= 0; if (selectables.IsAlmostSpecificCount() && delta != 0) { foreach (var selectable in selectables) { var target = selectable.GetComponent <RectTransform>(); var container = viewport; var bounds = container.TransformBoundsTo(target); float boundsElement = axis == 0 ? bounds.center.x : bounds.center.y; if ((positive && _rangeLeft.Contains(boundsElement)) || (!positive && _rangeRight.Contains(boundsElement))) { FocusManager.SetFocus(selectable); if (verticalScrollbar && horizontalScrollbar) { selectable.SetNavigation(verticalScrollbar, verticalScrollbar, verticalScrollbar, verticalScrollbar); } else if (verticalScrollbar) { selectable.SetNavigation(verticalScrollbar, verticalScrollbar.navigation.selectOnRight, verticalScrollbar.navigation.selectOnLeft, verticalScrollbar); } else { selectable.SetNavigation(verticalScrollbar.navigation.selectOnUp, verticalScrollbar, verticalScrollbar, verticalScrollbar.navigation.selectOnDown); } break; } } } } }
public void Initialize(string titleText, string descriptionText, FinishQustionEnum finishQustionEnum, bool useFocusUp, params ButtonInfo[] buttonInfos) { this.finishQustionEnum = finishQustionEnum; gameObject.SetActive(true); transform.SetAsLastSibling(); _isFirstFocusable = false; if (buttonInfos == null || dialogsIndexDictonary == null) { return; } if (titleContainer != null) { titleContainer.SetText(titleText); } if (descriptionContainer != null) { descriptionContainer.SetText(descriptionText); } int length = buttonInfos.Length; if (!dialogsIndexDictonary.TryGetValue(length, out _buttonsContainer)) { return; } foreach (var pair in dialogsIndexDictonary) { pair.Value.gameObject.SetActive(pair.Key == length); } for (int index = 0; index < buttonInfos.Length; index++) { if (index >= _buttonsContainer.childCount) { continue; } Transform child = _buttonsContainer.GetChild(index); if (child == null) { continue; } Button button = child.GetComponent <Button>(); TextManager textManager = child.GetComponentInChildren <TextManager>(); if (button == null || textManager == null) { continue; } ButtonInfo buttonInfo = buttonInfos[index]; var auxEvent = buttonInfo.unityEvent; auxEvent.AddInHeadNotPersistantListener(DisableObject); ButtonClickedEvent buttonClickEvent = new ButtonClickedEvent(); var auxList = auxEvent.UnityActions; foreach (var unityEvent in auxList) { buttonClickEvent.AddListener(unityEvent); } button.onClick = buttonClickEvent; textManager.SetText(buttonInfo.text); if (buttonInfo.isFirstFocus || length == 1 || (!_isFirstFocusable && index == length - 1)) { FocusManager.SetFocus(button.gameObject); _isFirstFocusable = true; } } }