IGDC 입문 프로젝트입니다.
이번에는 타워의 업그레이드와 제거 기능을 구현해봅시다.
PanelButtonClick.cs에서 UpgradeButtonClick 함수와 RemoveButtonClick 함수는 본문이 비어있는 상태지요.
이 안을 채워봅시다.
UpgradeButtonClick 함수는 BuildButtonClick 함수를 복사-붙여넣기한 후, 값 변경 및 일부 코드만 추가로 작성해주면 됩니다.
public void UpgradeButtonClick() {
if (!site.transform.GetChild(1).gameObject.activeSelf) {
Debug.Log("업그레이드 전에 타워를 건설해야 합니다");
return;
}
if (!gameManager.CanUseCost(15)) {
Debug.Log("코스트가 부족하여 건설할 수 없습니다");
return;
}
site.transform.GetChild(1).gameObject.SetActive(false);
site.transform.GetChild(2).gameObject.SetActive(true);
}
업그레이드이므로, 1번째를 비활성화 시키고 2번째를 활성화시키면 됩니다.
Cost는 15로 올렸습니다만, 이 값의 조정은 자유입니다.
그리고 건설이 되지 않았는데 업그레이드를 하게 두면 안되겠죠?
첫 번째 자식(Site)의 gameObject의 active 상태가 true인지 false인지 감지하기 위해 activeSelf를 통해 반환받습니다.
첫 번째 자식이 비활성화 되어 있는 상태라면, 아직 건설되어 있지 않은 상태이므로 return으로 함수를 종료합니다.
이번에는 제거 함수의 본문을 채워보겠습니다.
public void RemoveButtonClick() {
site.transform.GetChild(0).gameObject.SetActive(true);
site.transform.GetChild(1).gameObject.SetActive(false);
site.transform.GetChild(2).gameObject.SetActive(false);
}
간단합니다. 0번째 (Site)는 활성화시키고, 나머지 1번째와 2번째를 비활성화시키면 됩니다.
만약 철거 보상(?)을 주고 싶다면 아래 코드들과 같이 수정할 수 있습니다.
cost는 private라 외부에서 접근할 수 없으므로, public의 AddCost 함수로 더해줄 수 있도록 합니다.
// GameManager.cs 에 다음 함수를 추가해주세요
public void AddCost(int addCost) {
cost += addCost;
}
당연하지만, Cost를 더하는 함수는 Active를 세팅하기 전에 처리해야 합니다.
public void RemoveButtonClick() {
if (site.transform.GetChild(1).gameObject.activeSelf) {
gameManager.AddCost(3);
}
else if (site.transform.GetChild(2).gameObject.activeSelf) {
gameManager.AddCost(6);
}
site.transform.GetChild(0).gameObject.SetActive(true);
// ... 이하 생략
}
테스트를 해보면 잘 작동하는 것을 볼 수 있습니다.
'Unity > IGDC 입문 프로젝트' 카테고리의 다른 글
12. 로비 제작, 게임 오버 시 돌아오게 만들기 (0) | 2023.11.10 |
---|---|
10.5 - 버튼 클릭 수정 (0) | 2023.11.07 |
10. 에러 수정 (0) | 2023.09.19 |
9. 공격 타워 배치 및 Cost 기능 구현 (0) | 2023.09.03 |
8. 공격 타워 구현 (0) | 2023.09.03 |