2017-12-02 24 views
0

콘텐츠를 동적으로 추가하려는 세로 스크롤보기가 있습니다. 이렇게하기 위해 콘텐츠 크기 조정기 구성 요소와 세로 레이아웃 그룹 구성 요소를 콘텐츠 게임 개체에 연결하여 새 게임 개체를 자식으로 인스턴스화 할 때마다 Rect Transform이 자동으로 커집니다. 스크롤 막대가 이미 아래쪽에 있으면 새 개체가 아래쪽에 추가 된 후에 스크롤 막대를 아래쪽에 유지하려고합니다. 그래서 다음과 같이 그 일을 해요 : 새로 인스턴스화 스크롤 뷰 항목이 사각형의 크기가 나는 제로로 verticalNormalizedPosition를 설정된 시간으로 변환 증가되지 않았기 때문에콘텐츠 크기 조정 도구로 내용의 직사각형 변형을 업데이트 한 후 Unity 스크롤 사각형을 맨 아래로 스크롤하려면 어떻게합니까?

if (scrollRect.verticalNormalizedPosition == 0) 
    { 
     isAtBottom = true ; 
    } 

    ScrollViewItem item = Instantiate(scrollViewItem, scrollRect.content) ; 

    if (isAtBottom) 
    { 
     scrollRect.verticalNormalizedPosition = 0 ; 
    } 

그러나이 작동하지 않습니다. 따라서 Rect Transform이 최종적으로 업데이트되면 너무 늦게 스크롤됩니다.

내 콘텐츠의 높이가 400 픽셀이고 스크롤 막대가 맨 아래에 있다고 가정 해 보겠습니다. 이제는 높이가 100 픽셀 인 객체를 추가합니다. 그런 다음 스크롤 막대를 아래쪽으로 보내지 만 콘텐츠의 높이는 400 픽셀입니다. 콘텐츠 크기는 500 픽셀로 업데이트되지만 스크롤 막대는 400 픽셀 아래로 내려 가기 때문에 100 %가 아니라 80 %가 줄어 듭니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다. Content Size Fitter를 즉시 업데이트하는 방법이나 이벤트로 업데이트하는 Content Size Fitter에 응답하는 방법을 원합니다. 연구와 실험을 통해

, 나는 거의이 정확한 순서대로 줄을 바꾸어 첫 번째 옵션에 성공했습니다

Canvas.ForceUpdateCanvases(); 
scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ; 
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ; 
scrollRect.verticalNormalizedPosition = 0 ; 

그러나, 그것은 아주 모든 방법을 아래로 스크롤하지 않습니다. 항상 약 20 픽셀 떨어져 있습니다. 그래서 나는 강제로 일어나지 않는 레이아웃 작업이 아직 남아 있는지 궁금합니다. 아마도 패딩 또는 뭔가.

답변

0

좋아, 나는 그것을 알아 냈다고 생각한다. 대부분의 경우 verticalNormalizedPosition을 0으로 설정하기 전에 Canvas.ForceUpdateCanvases(); 만하면됩니다. 하지만 제 경우에는 콘텐츠 자체에 추가 할 항목에 세로 레이아웃 그룹 구성 요소와 콘텐츠 크기 조정 구성 요소가 있습니다.

Canvas.ForceUpdateCanvases(); 

item.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ; 
item.GetComponent<ContentSizeFitter>().SetLayoutVertical() ; 

scrollRect.content.GetComponent<VerticalLayoutGroup>().CalculateLayoutInputVertical() ; 
scrollRect.content.GetComponent<ContentSizeFitter>().SetLayoutVertical() ; 

scrollRect.verticalNormalizedPosition = 0 ; 

그것은 이러한 방법을 둘러싼 너무 작은 문서 거기 수치의 약간의 : 그래서 나는이 다음 단계를 순서대로 수행 해.