Unity/IGDC 입문 프로젝트

11. 타워 업그레이드 및 제거 기능 구현

말하는 닭 2023. 11. 7. 21:15

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);
    // ... 이하 생략
}

 

 

테스트를 해보면 잘 작동하는 것을 볼 수 있습니다.