Unity | 유니티/Unity 개발 일지

[Unity] 모바일 스크롤 구현(UGUI | Scroll View)

maintain_H 2023. 3. 9. 12:41
반응형

새로운 게임에 스크롤뷰를 사용해 스크롤링을 구현하게 되었다.

공부도 할 겸 오늘은 UGUI의 Scroll View 사용 방법을 작성한다.

 

최종 실행 화면

 

 

[Scroll Rect]

 

스크롤뷰를 클릭하면, 인스펙터 창에서 Scroll Rect 컴포넌트가 있는 걸 볼 수 있다.

이걸로 스크롤뷰에 대해 기본적인 설정을 할 수 있다.

 

 

유니티 레퍼런스에 나와있는 기능들에 대해 몇 가지를 표로 정리했다.

Property 기능
Content 스크롤 할 요소들의 집합에 대한 사각 틀.
요소들의 부모라고 보면 된다. 
Horiaontal 수평 스크롤링 활성화
Vertical 수직 스크롤링 활성화
Movement Type Unrestricted: 스크롤했을 때, 콘텐츠가 영역을 벗어나는 것을 허용.
Elastic: 콘텐츠가 스크롤 사각 영역을 벗어나지 않고, 영역 끝에 닿으면 튕긴다. 
Clamped: 콘텐츠가 사각 영역을 벗어나지 않게 한다.
Elasticity Elastic 모드에서 사용할 탄성 정도
Inertia 관성 모드. 활성화되면 드래그 후에 포인터를 떼도 계속 스크롤된다.
비활성화 하면 손으로 드래그 해야만 스크롤된다.
Deceleration Rate Inertia가 활성화 됐을 때, 콘텐츠가 정지하는 속도를 결정. 0이면 바로 정지, 1이면 계속 움직인다.
Scroll Sensitivity 스크롤 휠과 트랙 패드 스크롤 이벤트 민감도
Viewport Content의 부모. 

 

[주의]

웬만하면 Movement Type은 Unrestricted를 사용하지 말자. 사용할 일이 있을까 싶을 정도의 기능이다..

 

 

[Layout Group]

 

이 기능은 자동으로 오브젝트들을 정렬해주는 기능이다. 스크롤뷰 말고 다른 곳에서도 유용하게 사용할 수 있다.

 

스크롤뷰를 생성하고 오브젝트들을 처음 넣으면 위치들을 설정해줘야 하는데

이게 매우 귀찮고, 귀찮은 작업이다. 그리고 해상도가 달라지면 또 위치가 달라지기 때문에 

Layout Group을 사용하는 것이 좋다.

 

인스펙터 창에서 Add Component를 누르고 layout group을 검색하면 이렇게 3가지가 나오는데

원하는 걸로 선택해서 추가해주면 된다.

오브젝트 하나에 layout group 컴포넌트는 하나만 사용할 수 있다.

 

유니티 레퍼런스에 나와있는 기능들을 표로 정리했다.

Property 기능
Padding 레이아웃 그룹 모서리의 두께.
Spacing 레이아웃 요소 간의 간격.
Child Alignment 사용 가능한 공간을 모두 채우지 않을 경우 자식 레이아웃 요소에 사용할 얼라이먼트.
Control Child Size 요소의 크기를 지정하거나 요소를 배치할 때 레이아웃 그룹이 해당 자식 레이아웃 요소의 크기를 조정할지에 대한 여부.
Child Force Expand 추가로 사용할 수 있는 공간을 채우기 위해 자식 레이아웃 요소를 강제로 확장할지에 대한 여부.

 

 

- 터치 스크롤 구현 -

 

이제 다른 설명들은 생략하고 구현을 하려고 한다.

일단 먼저 스마트폰 느낌이 나게 해상도도 바꿔준다. 900x1950

 

[스크롤뷰 생성]

스크롤 뷰를 사용하기 위해 먼저 하이라키 창에서 우클릭 후 UI - Scroll View를 클릭 해 

Scroll View를 생성한다.

 

캔버스와 함께 Scroll View가 생성된 걸 확인할 수 있다.

그리고 Scroll View 밑에 Scrollbar가 생기는데, 스크롤바를 사용 안 할 생각이기에 과감히 삭제해준다.

 

Content는 스크롤 요소들이 들어가는 공간이라고 생각하면 된다.

 

 

이번에는 화면 꽉 차게 구현하기 위해서 stretch로 꽉 채워준다.

이건 본인이 원하는 크기로 설정하면 된다.

 

[요소 추가]

그리고 이제 Content 밑에 오브젝트를 넣어준다

이미지를 10장 넣었는데 처음에는 아무 설정을 하지 않아 그냥 기본 크기로 10개가 겹쳐 있다.

여기서 이제 아까 설명했던 Layout Group을 사용해준다.

 

[Layout Group Component 추가]

세로로 스크롤을 할 것이기 때문에 Content에 Vertical Layout Group 컨포넌트를 추가해준다.

 

 

이렇게 추가하면 바로 이미지들이 나란히 정렬이 된다.

여기서 이제 Child AlignmetControl Child Size, Child Force Expand를 사용해서

본인이 원하는 크기와 방식으로 정렬해주면 된다.

 

 

일단 이미지들을 구별하기 위해 서로 다른 색을 입혀줬다.

 

 

Vertical_Layout_Group_설정

 

가운데에서 위에서부터 채워지도록 Upper Center을 사용했고,

화면이 가로로 길어지면, 이미지들도 가로로 길어지게 하기 위해

Control Child Size에서 Width를 체크하고,

높이는 고정하기 위해 Height은 체크하지 않았다.

그리고 이미지들의 높이를 250으로 설정했다.

 

 

짠! 이미지들이 깔끔하게 정렬되었다.

그리고 화면에 담지 못한 애들은 저렇게 밑에 나란히 정렬되어 있다.

 

 

[실행 화면]

이제 실행하면..!

실행_화면

놀랍게도 스크롤이 위아래로 되는 것이 아니라 가로세로 난리가 나고,

터치를 멈추면 바로 처음 위치로 가는 사태가 일어난다..!

 

[Scroll Rect]

가로로 스크롤 되는 것은 Scroll Rect에서 Horizontal을 체크 해제하면 해결 된다!

Horizontal

 

이게 스크롤 방향을 정하는 건데 본인은.. 멍청하게 세로로만 한다고 해놓고 체크 해제하는 거를 까먹었다 ㅎㅎ

 

[Contenet Size Fitter]

포인터를 떼면 처음 위치로 돌아가는 것은 Content Size Fitter Component를 추가해주면 된다.

Content_Size_Fitter_설정

놀라지 말고 Content에 Content Size Fitter를 추가해주고,

Vertical FitPreferred Size로 설정해주면 된다.

 

 

 

[실행 화면_최종]

 

실행_화면_최종

짠! 이제 제대로 작동한다.

 

우당탕탕 터치 스크롤 구현 끗!

반응형