본문 바로가기
유니티 시스템 프로그래밍

유니티 시스템 스터디-5주차: 유저 인벤토리

by Luden59 2024. 11. 26.

저어어어엉말 오랜만에 돌아온 유니티 시스템 스터디이다..

그동안 많은 일이 있었다.

일단 무려 3주 동안 이어졌던 시험 기간이 드디어 끝났으며,

기존에 진행중이던 게임 프로젝트에서... 기획자가 나가게 되었다.

많은 이유가 있었지만, 그런 건 다 필요 없이 중요한 건,

이제 그 기획자가 했던 기획 일까지 내가 하고 있다는 것이다.

개발도 정신없는데, 기획까지 하느라 정신이 없다...

뭐... 위의 이유들 + 게으름 이슈로 아주아주 오랜만에 돌아오게 되었다.

움하하...

 

아무튼... 이제 본격적으로 시작해 보겠다!

 

이번주에 학습한 내용은 무한 스크롤뷰를 이용한 유저 인벤토리 만들기 었다.

이전에 만들었던 csv 파서를 가지고 아이템 정보가 있는 데이터 테이블을 파싱 하여 따로 저장한 다음,

UserInventoryData에 저장하는 형식이었다.

PlayerPrefs에서 저장하는 내용은 아이템의 번호와 시리얼 넘버였다.

 

단순히 보유하고 있는 아이템의 번호뿐만 아니라 시리얼 넘버를 함께 저장하는 이유는,

동일한 아이템을 여러 개 보유할 수 있고, 이를 구분하기 위함이었다.

 

다만 PlayerPrefs에 저장하는 방식은 다소 의아하긴 했다.

바로 Json파일로 저장하는 것이었다. 

물론 해당 프로젝트는 모의로 만드는 것이었기 때문에 어쩔 수 없다고는 하나, 

데이터를 가져오고 다시 저장하는 과정에서 문자열의 길이가 한없이 늘어날 가능성이 있고,

파싱을 그때그때 해야 한다는 번거로움이 있어 보였다.

이 경우에는 아이템의 최대 보유 수를 지정하는 것이 도움이 되지 않을까 하는 생각이 들었다.

 

다음은 이렇게 파싱 된 정보를 무한 스크롤뷰에 붙이는 내용이었다.

현업에 있을 때 사용법이 미숙해서 계속 날 힘들게 했던 놈을 여기서 또 볼 줄이야...

물론 그만큼 많이 사용한다는 뜻이기도 할 것이다.

 

무한 스크롤뷰의 개념은 이러하다.

만약 인벤토리에 보여줘야 하는 아이템의 수가, 수만 수천 개라면,

그만큼 많은 수의 슬롯을 만들어야 할까?

그렇게 된다면 가비지도 많이 생길뿐더러 너무 많은 게임 오브젝트로 랙이 걸리고 말 것이다.

무한 스크롤뷰는 어차피 보이는 슬롯의 개수는 뷰의 크기에 따라 고정적이기 때문에,

보일 슬롯만 만들어두고 이를 계속 재사용하는 스크롤 뷰이다. 

데이터가 수만 수천 개 이더라도, 슬롯의 개수는 한정적이기 때문에 자원을 효율적으로 사용할 수 있다.

이미 나와있는 에셋이 많이 있을 정도로, 무한 스크롤 뷰는 현업에서 정말 많이 사용되는 기법이다.

따라서 이 프로젝트에서도 해당 기법을 사용하였다.

 

다음은 주어진 아이템들을 정렬하는 기능을 작성하였다.

정렬 타입(아이템 등급, 아이템 타입)에 따라 정렬을 진행하였으며,

이때 인자로 Compare <T> 대리자를 사용하였다.

 

Compare<T> 대리자는 C#에서 제공하는 대리자로,

형태는 다음과 같다.

이는 약간 C++의 sort 함수에 전달되는 인자와 비슷한데,

두 객체를 비교하여 같으면 0, 왼쪽 인자가 더 크면 양수, 오른쪽 인자가 더 크면 음수를 반환하는 함수형식이다.

위의 대리자를 보면서 C#에서 이미 제공해 주는 여러 가지 대리자가 있다는 것을 알게 되었다.

 

오랜만에 강의를 듣고 블로그를 작성해서 그런지 오랜 시간만에 작성이 완료되었다...

다음부터는 더 집중해서 호다닥 끝내야지..

 

그럼 다음 포스트에서 만나겠다!!