Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

ScrollRect - Center on child

Discussion in 'UGUI & TextMesh Pro' started by mimminito, Nov 9, 2014.

  1. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
    Hi,

    I was wondering if there is a component to center a ScrollRect on a child. Much like the UICenterOnChild component that NGUI has?

    Adam
     
  2. jopzsanji

    jopzsanji

    Joined:
    Sep 18, 2012
    Posts:
    3
    Hi mimminito! :)

    I also have the same problem, Did you find out a solution?

    Jopz
     
    enriqueflores likes this.
  3. mimminito

    mimminito

    Joined:
    Feb 10, 2010
    Posts:
    780
  4. Wolfderic

    Wolfderic

    Joined:
    May 9, 2019
    Posts:
    7
    Code (CSharp):
    1.  private Vector3 GetCenteredContentPosition(RectTransform child, ScrollRect scrollRect) {
    2.         Vector3[] viewportCorners = new Vector3[4];
    3.         RectTransform viewport = scrollRect.viewport;
    4.         viewport = viewport != null ? viewport : (RectTransform) scrollRect.transform;
    5.         viewport.GetWorldCorners(viewportCorners);
    6.         Vector3 centreWorldPos = ((viewportCorners[1] - viewportCorners[0]) / 2f) + viewportCorners[0];
    7.         float h = centreWorldPos.y - child.position.y;
    8.         Vector3 displacement = new Vector3(0, h, 0);
    9.         Vector3[] contentCorners = new Vector3[4];
    10.         scrollRect.content.GetWorldCorners(contentCorners);
    11.        
    12.         if (contentCorners[1].y + displacement.y < viewportCorners[1].y) {
    13.             displacement.y = viewportCorners[1].y - contentCorners[1].y;
    14.         } else if (contentCorners[0].y + displacement.y > viewportCorners[0].y) {
    15.             displacement.y = viewportCorners[0].y - contentCorners[0].y;
    16.         }
    17.         return scrollRect.content.position + displacement;
    18.     }
     
  5. unity_6A32D942723CE20B78C9

    unity_6A32D942723CE20B78C9

    Joined:
    Jul 13, 2022
    Posts:
    1
    Code (CSharp):
    1.         private void CenterContentToTarget(ScrollRect scrollRect, RectTransform target)
    2.         {
    3.             float contentSize = scrollRect.content.rect.height;
    4.             float viewportSize = scrollRect.viewport.rect.height;
    5.             float halfViewportSize = viewportSize * 0.5f;
    6.             Vector3 localPosition = scrollRect.content.InverseTransformPoint(target.position);
    7.             scrollRect.verticalNormalizedPosition = (localPosition.y - halfViewportSize) / contentSize;
    8.         }
     
    SCIIBAJAN likes this.