private void CenterOnItem() { var itemCenterPositionInScroll = GetWorldPointInWidget(_scrollTransform, GetWidgetWorldPoint(_targetLevel)); var targetPositionInScroll = GetWorldPointInWidget(_scrollTransform, GetWidgetWorldPoint(MaskTransform)); var difference = targetPositionInScroll - itemCenterPositionInScroll; difference.z = 0f; difference.x = 0f; var normalizedDifference = new Vector2( difference.x / (_content.rect.size.x - _scrollTransform.rect.size.x), difference.y / (_content.rect.size.y - _scrollTransform.rect.size.y)); var newNormalizedPosition = _scrollRect.normalizedPosition - normalizedDifference; if (_scrollRect.movementType != ScrollRect.MovementType.Unrestricted) { newNormalizedPosition.x = Mathf.Clamp01(newNormalizedPosition.x); newNormalizedPosition.y = Mathf.Clamp01(newNormalizedPosition.y); } _scrollTargetPosition = newNormalizedPosition; _scrollRect.normalizedPosition = _scrollTargetPosition; _targetState = TargetLevelState.inCenter; _contentTopYPosition = _content.anchoredPosition.y + _scrollTransform.rect.height / 2; _contentBottomYPosition = _content.anchoredPosition.y - _scrollTransform.rect.height / 2; }
private void Update() { if (_targetState == TargetLevelState.inCenter) { if (_content.anchoredPosition.y > (_contentTopYPosition)) { _uIPlayerPointer.ShowUpPointer(); _targetState = TargetLevelState.above; } if (_content.anchoredPosition.y < (_contentBottomYPosition)) { _uIPlayerPointer.ShowDownPointer(); _targetState = TargetLevelState.below; } } else { if (_content.anchoredPosition.y >= _contentBottomYPosition && _content.anchoredPosition.y <= _contentTopYPosition) { _uIPlayerPointer.HidePointer(); _targetState = TargetLevelState.inCenter; } } }