오늘 구현하고자 하는 부분 => WAVE 이후 아이템 선택 및 WAVE 시작
1. 아이템 구조 설정
맨 상위 오브젝트로 RewardGroup을 두어 두 개의 Reward를 관리하도록 설정.
Reward는 Reward의 내용을 서술하는 UI부분과 Reward의 내용을 직관적으로 알 수 있는 위의 오브젝트 두 부분으로 나뉘어 구현.
2. json 파일 생성
(1) Reward 내용
- 적 타격시 총알 되받기
- 탄창 소진 시 자동충전
- 총 공격력 상승
- 기본 총의 레이저 공격 범위 확대
- 플레이어 maxHp 증가
- 총기 변경 => 바주카포(긴 선딜, 넓은 범위 공격)
(2) json 저장
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 내용을 복붙
'K-digital traning > Final Project' 카테고리의 다른 글
Gazzlers 개발일지 - 신규 유저를 위한 게임 안내 (0) | 2024.01.04 |
---|---|
Gazzlers 개발일지 - Zeppelin 생성 (0) | 2024.01.02 |
Gazzlers 개발일지 - Enemy 공격 (1) | 2023.12.27 |
Gazzlers 개발일지 - Enemy 관리 (0) | 2023.12.21 |
Gazzlers 개발일지 - 건물 설치 (0) | 2023.12.20 |