콘텐츠를 동적으로 추가하려는 세로 스크롤보기가 있습니다. 이렇게하기 위해 콘텐츠 크기 조정기 구성 요소와 세로 레이아웃 그룹 구성 요소를 콘텐츠 게임 개체에 연결하여 새 게임 개체를 자식으로 인스턴스화 할 때마다 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 픽셀 떨어져 있습니다. 그래서 나는 강제로 일어나지 않는 레이아웃 작업이 아직 남아 있는지 궁금합니다. 아마도 패딩 또는 뭔가.