Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    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.