top of page

BattleStar - 인벤토리 시스템

  • 작성자 사진: 100 powerun
    100 powerun
  • 2024년 11월 27일
  • 3분 분량

최종 수정일: 2월 4일


1. 인벤토리


1. 인벤토리 메인 UI 코드


인벤토리 메인 UI는 인벤토리 창 자체, 인벤토리의 칸, 도움말 UI를 관리합니다.


인벤토리 UI스크립트는 처음 게임 시작 시 실행 때부터 인벤토리가 열려 있는 것을 방지해줍니다.


업데이트에서는 인벤토리가 가지는 정보를 계속해서 불러옵니다.


인벤토리에 아이템을 추가하는 함수는 아이템의 정보와 수량만 있다면 아이템을 생성하여 가져올 수 있습니다.


게임매니저에 있는 AddItem을 살펴보면 우선 얻고자 하는 아이템이 존재하지 않는다면 경고메세지를 띄운 뒤 바로 종료시킵니다. 하지만, 얻고자 하는 아이템이 존재하고, 현재 플레이어데이터 중 가지고 있는 아이템이라는 리스트가 null이라면 새롭게 리스트를 만들어내 아이템이 추가되지 않는 상황을 방지합니다.


그 후 가지고자 하는 아이템의 id가 찾고자 하는 아이템의 id와 같다면 existingItem이라는 변수화를 시킨 뒤 후에 가지고자 하는 아이템을 AddItemListElement 함수를 통해 아이템이 획득함을 알려주는 창을 띄우게 합니다.


그 뒤 얻은 아이템이 진행 중인 퀘스트에서 요구하고 있는지를 확인하고, 위에서 얻고자 하는 아이템을 변수화시킨 existingItem을 만약 가지고 있다면, 수량을 추가하고, 새로운 아이템이라면 새롭게 데이터화를 시킨 뒤 위에서도 언급한 현재 플레이어 데이터에 있는 가지고 있는 아이템 목록에 추가시킵니다.


AddItemListElement는 아이템을 흭득했을 때 게임에서 아이템을 얻었다고 일림을 띄워주는 역할을 합니다.


우선 아이템의 정보와 아이템의 수량을 매개변수로 받아오고, 해당 스크립트 내에 List<GameObject> itemList라는 이름을 가진 아이템 획득 창이 이 스크립트에서 지정한 최대 갯수인 3개를 넘으면 가장 먼저 생성되었던 리스트를 삭제합니다.

예시 사진은 '철가루' 아이템을 10개 얻었을 때의 메세지입니다. 만약 저 메세지가 3개를 초과한다면 가장 먼저 생성된 저 메세지 창이 없어지고 새로운 창이 나타나는 방식입니다.


비교되는 예시로는 메이플스토리에서 최대로 띄워주는 아이템 흭득 메세지로 총 6줄이고, 그 이상의 아이템 종류를 얻은 경우는 가장 먼저 생성된 메세지를 삭제한 뒤 새로운 메세지를 출력합니다.(캡쳐: 춘자 YouTube)



위에서 함수로 아이템을 정상적으로 얻었을 경우 아이템 흭득 메세지 창을 지정한 위치인 화면 오른쪽 아래에 아이템 획득 창을 띄우고, 새롭게 아이템 Element를 조금 전 생성된 Element로 세팅한 뒤 천천히 없어지는 듯한 효과를 주기 위해 SetTimeValues(페이드인 시간, 페이드아웃 시간, 대기시간)를 설정해 줍니다.


그 후 만약 아이템이 존재할 때 아이템 획득 창의 아이템 이미지, 아이템 이름, 아이템 수량을 설정해 준 뒤 맨 아래의 itemList.Add(newItemElement)를 통해 생성시킵니다.


else의 경우는 아이템이 존재하지 않았을 때의 경우입니다.


인벤토리 메인 UI의 코드 마지막은, 도움말 창을 on, off하는 버튼으로 만약 도움말 창이 하이라이키에서 활성화 되어있을 경우 비활성화하고, 비활성화되어있다면 활성화하는 방식으로 하나의 함수로 관리하였습니다.



최대 3개까지 출력되며 3개가 초과하면 3개에 맞춰서 초과한 획득창을 없애는 걸 알 수 있습니다.

페이드까지의 시간이 빨라 잘 확인할 수는 없지만, 4개까지 나와야 할 창이 3개까지만 출력되는 걸 상점 창의 오른쪽 끝을 통해 알 수 있습니다.


2. 인벤토리 슬롯 코드




인벤 슬롯 코드는 게임 시작 시 함선의 정보를 불러온 뒤 아이템을 소유하고 있지 않다면 기본 스프라이트로 채워 아이템을 가지고 있지 않다는 걸 알려줍니다.


업데이트에서는 아이템이 인벤토리 내에 존재한다면 가지고 있는 해당 아이템의 스프라이트를 불러와 슬롯이 가지고 있는 스프라이트의 이미지로 바꾸어주는 역할을 수행합니다.


함선의 정보를 불러오는 이유는 해당 게임의 인벤토리 소지 제한이 함선이 실을 수 있는 무게의 한도에 따라 달라지기 때문에 함선의 정보를 가져오는 것입니다.


아래의 스크린샷은 인벤토리 슬롯의 확대 스크린샷입니다. 오른쪽에는 아이템이 존재하지 않는 상태이고, 왼쪽에는 아이템이 있는 상태입니다.


해당 코드는 아이템의 세부 사항을 보여주는 코드로, 슬롯을 클릭할 시 오른쪽에 있는 아이템 디테일 창에서 아이템에 대한 자세한 정보와 인벤토리 총사용량을 확인할 수 있게 해줍니다.


아래는 아이템의 세부 사항을 확인하는 곳으로 '수리팩' 아이템을 클릭했을 때 나타내는 정보창입니다.



해당 코드는 아이템 클릭 시 디테일 창 맨 아래에 있는 무게를 나타낼 때 쓰이는 코드입니다.


우선 최종 무게를 클릭 때마다 초기화 되게 만든 뒤 가지고 있는 모든 아이템을 확인하고 확인한 모든 아이템의 무게를 전부 더해줍니다. 이렇게 구한 무게 표시는 위의 스크린샷에서 하얀색 구역에 해당합니다.

그 뒤 최종적으로 받아온 무게의 수 단위를 받아 출력하고 현재 무게와 함선이 실을 수 있는 총 무게량을 나눈 뒤 100 분율을 하고 소수점 1의 자릿수만 출력되게 해줍니다.


아이템의 수량을 현재 선택한 아이템으로 바꿔주는 이유는 이제 선택(클릭)한 아이템이 차지하는 공간을 표시하기 때문입니다. 아이템 무게 스크롤바의 max 값을 현재 함선이 실을 수 있는 한도를 초과할 수 없으므로 함선이 실을 수 있는 한도량과 똑같이 만들어주고 최솟값은 0으로 설정해 줍니다.


현재 값은 선택한 아이템의 수와 해당 아이템의 무게를 곱하여 선택한 아이템이 차지하는 공간을 스크롤바의 값에 넣어줍니다.


아래에 적재할 수 있는 무게의 경우는 함선의 정보를 그대로 가져오고 아래에 현재값은 모든 아이템이 차지하는 무게 값으로 설정해 줍니다.


아래 GIF에서도 보이듯 아이템을 누르면 그 아이템이 차지한 공간만큼 개별로 표시가 나타납니다.


コメント


bottom of page