예제 #1
0
        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;
        }
예제 #2
0
        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;
                }
            }
        }