K-digital traning/Final Project

Gazzlers 개발일지 - WAVE 이후 보상(아이템) 선택 구현

내꺼블로그 2023. 12. 29. 15:19

오늘 구현하고자 하는 부분 => WAVE 이후 아이템 선택 및 WAVE 시작

 

 

 

 

 

1. 아이템 구조 설정

 

맨 상위 오브젝트로 RewardGroup을 두어 두 개의 Reward를 관리하도록 설정.

 

 

 

 

Reward는 Reward의 내용을 서술하는 UI부분과 Reward의 내용을 직관적으로 알 수 있는 위의 오브젝트 두 부분으로 나뉘어 구현.

 

 

 

 

 

2. json 파일 생성

(1) Reward 내용

      - 적 타격시 총알 되받기

      - 탄창 소진 시 자동충전

      - 총 공격력 상승

      - 기본 총의 레이저 공격 범위 확대

      - 플레이어 maxHp 증가

      - 총기 변경 => 바주카포(긴 선딜, 넓은 범위 공격)

 

 

 

(2) json 저장

 

excel

data파일을 다음과 같은 구조로 작성.

 

 

 

Mr. Data Converter를 통해 엑셀 파일의 내용을 json 형식으로 변환한 뒤, 복사하여

 

 

json viewer에 붙여넣고 형식 부분은 제거(int, string 적혀있는 부분)

다시 만든 이 format을 복사하여

 

 

 

메모장에 붙여넣고 .json으로 저장.

 

 

 

 

3. 데이터 연동

 

(1) 데이터 불러오기

 

Resources 폴더에 reward_data.json 파일을 저장.

 

 

DataManager

reward_data를 저장 및 관리할 dictionary를 선언.

 

Resources폴더에 있는 reward_data.json에 저장된 데이터를 불러오기 위한 함수.

 

RewardGroupController에서 Reward에 reward_data를 한꺼번에 적용하기 위해 사용될 GetRewardDatas(반환형이 List<RewardData>)와 id를 통해 RewardData에 참조하기 위해 사용될 GetRewardData 함수 구현.

 

 

 

- RewardGroupController

맨 위 구조에서 보았듯 각각의 reward들을 관리하기 위한 arrRewards를 선언.

arrRewards에 RewardData를 할당하기 위해 listrewardDatas도 선언.

 

reward_data가 잘 연동되는지(데이터를 잘 불러오고 있는지) Log를 찍어 확인.

 

 

 

결과

 

잘 나오고 있음(귣귣)

 

 

 

(2) 데이터 UI에 띄우기

 

- RewardGroupController

화면에 Reward를 띄우기 위한 ShowRewards 함수를 작성.

한번에 두 가지 Reward를 띄울 때 중복으로 띄우면 안되므로 중복을 제거하기 위해 rewardID라는 List를 새로 선언하여, List 내에 존재하는 index만을 참조하여 이를 통해 얻은 RewardData의 id를 RewardGroupController가 관리하고 있는 Reward에게 전달.

이미 쓴 id는 rewardID에서 제거.

 

 

- Reward

Reward의 Data를 설정하는 SetData 함수 구현.

id를 통해 DataManager로부터 같은 id를 갖고 있는 data를 받아와 textName과 textDescription에 data에 저장된 이름과 설명을 각각 할당.

 

 

 

결과

 

 

 

 

 

(3) 데이터 적용(아이템을 획득했다!정도 까지만)

 

- RewardGroupController

 

기존 listRewardDatas에서 저장형식을 int로 바꾼 listRewardDatasID로 변화.(=> 몇몇 데이터 중에서는 중복으로 나오면 안되는 RewardData가 존재하였기에 중복들을 제거한 RewardData의 ID만을 따로 관리하는 List를 선언)

Reward가 선택되었을 때 이를 Main에게 알리기 위한 onWhenSelect와 onWhenUnselect 대리자 선언.

 

 

List에 현재 data로 저장되어 있는 RewardData들을 전부 할당.

만든 List에 저장되어 있는 id들을 따로 또 속성값으로 미리 선언해놓은 list에 할당.

이미 할당되어 갖고 있는 Reward들의 Init함수를 새로 구현하고 Init함수의 매개변수로 대리자를 할당하여 Reward 각각이 선택되었을 때(+ 선택X일 때)의 위의 대리자를 호출 하도록 구현.

 

 

rewardID는 미리 선언해놓은 listRewardDatasID를 ToList로 받아 값만 복사되도록 구현.

그 밑에는 위에와 동일.

 

 

Player의 Reward 선택 이후 호출될, RewardGroupController의 모습을 사라지도록 할 HideRewards 함수 구현.

id가 2002, 2003, 2004인 애들은 한번 선택 이후 다시는 나오면 안되는 Reward로 Player가 만약 이 Reward들 중  하나를 선택했다면 다시는 UI상으로 띄우지 못하게 하기 위해 listRewardDatasID에서 다음의 id를 제거.

RewardGroupController의 모습을 나타내지 않게 하기 위해 SetActive를 false로 설정.

 

 

 

- Reward

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-TestRewardMain

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

결과

 

 

 

 

 

 

4. GameScene에 적용

 

GameMain에 TestRewardMain 내용을 복붙