BattleStar - 주점/숙소 시스템
- 100 powerun
- 2024년 11월 27일
- 3분 분량
최종 수정일: 1월 31일
3. 주점
1. 주점 메인 UI 코드

2. 주점 디테일 UI 코드

간결한 코드를 위해 텍스트를 List화 시켜 index만 바꾸어 사용하고 있습니다.

마지막 컴포넌트인 주점 슬롯 List를 가져온 뒤 해당 스크립트를 인스턴스화 시켜줍니다.
승무원의 디테일을 확인하는 함수가 최신 것과 옛날 것이 있는데, 프로젝트를 진행하는 도중 2주 사이에 코드 스타일이 바뀐것이 이유입니다. 신규 기능을 넣을 당시 과거에 짰던 코드는 이전의 함선 조선소처럼 각 슬롯의 버튼마다 승무원의 정보를 넣어가면서 정보를 출력했었지만 수정 당시의 코딩 스타일과 맞지 않아 새롭게 변형을 시켰습니다.

최신 것과 옛날 것의 차이점은 최신 것은 inCrew 정보를 불러오고 과거 것은 매개변수로 승무원 정보를 불러옵니다.
아래의 함수는 승무원의 정보를 위에서 보여준 창에 모두 나타나게 해주는 함수이고 각각 승무원 슬롯에 할당되어있는 버튼 함수 입니다.


HireBtn은 선택한 승무원을 고용하는 버튼 함수로 버튼을 누를 시 선택한 승무원을 플레이어 데이터의 소유 중인 승무원 데이터에 추가합니다. 그리고 해당 승무원의 구매 상태를 true로 바꾸고 승무원의 정보를 다시 불러와 해당 승무원의 재구매를 방지합니다.
아래의 CheckPubInfo에서 PubUI_ID에 있는 CheckData는 슬롯에 존재하는 승무원들의 계급과 승무원의 고용 상태를 확인해 주는 내용을 담고 있습니다. 만약 여기에서 승무원이 고용되어 데이터를 다시 불러온다면 고용 버튼은 비활성화가 됩니다.

해당 함수 또한 승무원의 디테일 창을 On/Off하는 버튼 리스너용 함수 입니다.

해당 함수는 다른 곳과 마찬가지로 정보를 리셋하는 함수입니다.

3. 주점 승무원 슬롯 UI 코드
이곳은 주점 창 왼쪽에 선택 가능한 여러 승무원들의 슬롯마다 존재하는 스크립트들 입니다.
가져오는 컴포넌트는 승무원 아이콘, 승무원 정보, 아이콘 스프라이트들, 승무원이 고용됐음을 알려주는 오브젝트 이렇게 4개입니다.

처음 시작 시 정보를 확인하는데 이 정보에는 가지고 있는 승무원의 정보 중 등급과 고용되었는지, 고용되지 않았는지 확인합니다. CheckHire는 해당 승무원이 이미 고용되어 있다면 고용 확인과 중복 구매를 방지하여 해당 승무원의 버튼을 비활성화합니다.




아래의 사진이 고용된 승무원과 고용되지 않은 승무원의 상태를 보여주는 스크린샷 입니다.

SetIncrew는 위에서 설명한 _PutCrewDetail의 inCrew를 설정해 주는 버튼 리스너로, 승무원을 확인하기 위해 해당 승무원을 누를 경우 클릭한 승무원의 정보를 디테일 쪽에 나타낼 승무원으로 만들어 고용을 진행하거나, 승무원의 세부 사항을 확인할 수 있게 해줍니다.

4. 승무원 숙소
1. 숙소 메인 UI 코드

아래가 승무원 슬롯 프리팹 입니다.

텍스트 리스트 컴포넌트

처음 시작 시 인스턴스화를 시킨 뒤 승무원의 정보를 불러옵니다.

우선 가장 먼저 불러오는 데이터인 슬롯 데이터는 각 함선마다 수용할 수 있는 승무원의 수가 달라서 슬롯의 개수를 생성시키거나 빼주는 함수입니다. 만약 함선을 선택하였을 때 해당 슬롯이 전에 있던 함선의 슬롯보다 많을 때는 슬롯을 추가해 주고 슬롯 리스트에 해당 슬롯을 저장합니다.
만약 반대일 경우 해당 슬롯을 지우고 지운 수만큼 리스트에서도 제거해 줍니다. 만약 해당 승무원이 배치 중인 상태라면 해당 승무원을 배치 상태에서 해제시켜 줍니다.

승무원 정보를 불러오는 함수인 GetCrewData는 승무원의 정보를 불러오는 함수입니다. 이 함수는 처음 시작, 매번 숙소 창을 열 때, 강화를 진행했을 때마다 불러오며 승무원의 정보를 슬롯 리스트에 생성된 슬롯들을 할당 시켜줍니다.
이렇게 할당된 승무원들은 반드시 플레이어 데이터의 보유 중인 승무원의 정보만을 가져오고, 각각의 슬롯들에는 버튼 리스너가 추가되어 승무원 슬롯을 누를 시 클릭한 슬롯에 할당된 승무원의 정보를 불러오게 해줍니다.

CheckOwnCrewInfo 함수는 슬롯마다 기본적으로 들어가는 리스너 함수로 해당 리스너를 할당시켜 주는 코드는 슬롯의 스크립트에 존재합니다.
우선 등급을 확인한 뒤 등급에 맞는 스프라이트를 설정해 주고 여러 정보를 디테일 창에 씌워줍니다. 만약 디테일 창이 열려있다면 새롭게 선택한 승무원의 정보가 먼저 표시되어야 하는 것이 이상적인 동작이기 때문에 닫아줍니다.


CheckRank는 현재 슬롯에 할당된 승무원의 정보 중에서 계급에 따라 다른 랭크 스프라이트를 적용해 주는 함수입니다.

DetailBtn함수는 승무원의 초상화 자체에 버튼으로 할당되어 있으며 클릭 시 승무원의 프로필을 확인할 수 있습니다.

ResetDetail은 함수는 숙소를 나가거나 최초 시작 시 매니저 쪽에서 실행시키는 함수입니다. 모든 데이터를 초기화 시켜 처음 열었을 때 텍스트에 아무것도 없게 만들거나, 종료 후 다시 방문했을 때 이전에 선택한 승무원이 그대로 있는 상황을 막아줍니다.


2. 숙소 승무원 슬롯 UI 코드

아래는 처음 시작 시 승무원의 정보를 불러오고 만약 승무원의 정보가 없다면 디폴트 값을 할당해 줍니다.

하지만 승무원의 정보가 있다면 승무원의 초상화와 등급 스프라이트를 이미 존재하는 승무원의 정보에 맞는 스프라이트를 할당해 줍니다.

이 이후부터는 아래의 함수를 이용해 매번 열고 닫을 때 마다 승무원의 정보를 슬롯에 불러옵니다.

SetIncrew는 승무원 슬롯 선택 시 해당 슬롯이 가지고 있는 승무원의 정보를 메인의 inCrew에 할당시켜 주는 함수로 각 슬롯마다 할당받은 유동적인 승무원의 정보를 불러옵니다. 해당 버튼은 총 2개의 리스너를 가지고 있는데 위에 메인에서 할당시킨 디테일을 불러오는 함수와 아래의 SetIncrew이다. SetIncrew를 기본 버튼 리스너로 할당시켜 디테일을 불러오는 리스너 보다 먼저 작동하여 increw를 설정한 뒤에 정보를 불러오게 만들었습니다.

Comments