UpgradeManager에서 버튼의 Color 변수와 버튼 배열을 선언한다.
x1, x10,x 50, Max 버튼을 모두 이 배열에 넣는다.
ActivateButton 함수를 선언한다.
인스펙터에서 Disabled 컬러는 그레이로 하고 Enabled 컬러는 FFFFFF의 흰색으로 했다.
버튼 클릭 이벤트에 넣어줄 함수다.
버튼이 눌릴 때마다 ActiveButton 함수가 호출돼서 버튼 상태가 업데이트 된다.
예를 들어 X1을 클릭하면 그 버튼 컬러만 하얗고 나머지는 비활성화된듯한 그레이 컬러가 된다.
여기에 Dotween의 DoPunchPosition을 추가한다.
0.5초 동안 -5만큼 아래로 내려갔다가 올라오는데 버튼 누를 때 생동감이 느껴진다.
업그레이드 가능 횟수를 계산하는 함수를 만들려고 하는데
protected로 보호되어 있기 때문에 프로퍼티를 따로 만든다.
CalculateUpgradeCount 함수를 만든다.
업그레이드 가능 횟수인 count 값을 구할 수 있는 3가지 방법이다.
2번째가 제일 직관적이고 쉽다고 생각한다.
그러나 3번째 방법이 업그레이드 횟수가 매우 큰 경우에 효율적이다.
반복문을 제거했기에 성능과 정확성이 올라간다.
등비수열과 Mathf.Log 함수의 응용 심화는 추가 공부가 필요하다.
UI를 만들기 위해 사용한 버튼 변수가 너무 방대하다.
#region #endregion을 추가하여 깔끔하게 닫아준다.
#region Inspector 라고 입력하면 무엇이 들어있는지 한눈에 알 수 있다.
bool 타입의 CanUpgradeManyTimes 함수를 만든다.
여기서 업그레이드 가능 여부를 계산한다.
CalculateUpgradeCount 함수에서 계산한 count를 업그레이드 횟수와 비교하여
가능할 경우 true, 불가능하면 false를 반환하도록 한다.
업그레이드 횟수를 받아서 업그레이드 비용이 얼마나 드는지 계산하는 GetUpgradeCost 함수도 만든다.
여기서도 등비수열 합 공식을 이용해 Mathf.Pow 함수로 계산한다.
그나마 쉬운 Mathf.Pow 함수는 (10, 2)일 경우 10² 을 말한다.
TimesToUpgrade 프로퍼티를 만든다.
몇 번 업그레이드를 하는지 이 변수에 저장할 것이다.
버튼이 눌렸을 때 업그레이드가 가능한지 여부를 계산하여 TimesToUpgrade 변수에 저장한다.
삼항 연산자를 사용하여 if문을 축약할 수 있다.
x1버튼은 그대로 1을 저장하고, x10과 x50버튼은 10번 업그레이드가 가능한지 여부를 가져와 삼항 연산자로 값을 저장한다.
마지막 Max 버튼은 업그레이드 가능 횟수를 계산하는 함수를 통해 그대로 저장한다.
UI에 비용이 얼마나 드는지 나오게 한다.
텍스트는 ToString 함수로 string 타입으로 바꿔야 한다.
GetUpgradeCost 함수를 이용해 비용이 텍스트로 나오도록 한다.
플레이해봤을 때 문제는 X1 버튼이 소지 금액이 마이너스여도 누를 수 있다는 것이다.
10, 50 버튼은 충분한 금액이 없으면 TimesToUpgrade가 0이 되고,
Max 버튼은 현재 가능한 최대 업그레이드로 업데이트가 되기 때문에 문제가 없다.
하지만 X1은 그냥 1로 값이 저장되도록 했기 때문에 if문을 통해 소지 금액보다 큰 경우 누를 수 있도록 한다.
BaseUpgrade 스크립트에 Elevator 클래스 변수를 선언한다.
Start 메서드에서 GetComponent를 통해 가지고 있는 Elevator 스크립트를 가져와 초기화한다.
Elevator 스크립트에는 엘리베이터 광부에 대한 참조가 없었다.
엘리베이터 광부는 Instantiate를 통해 생성하는 게 아니라 계속 씬에 있기 때문에 참조할 필요가 없었다.
Elevator를 업그레이드 할 경우 광부의 능력치에도 변화를 줘야 하기에 이번에 새로 선언한다.
새로운 ElevatorUpgrade 스크립트를 만든다.
RunUpgrade 함수를 오버라이드 하여 재정의 한다.
샤프트 광부와 마찬가지로 업그레이드되면 용량과 속도가 올라가고 10레벨이 될 때마다 이동 속도가 올라간다.
샤프트에서 버튼을 복사하여 엘리베이터에도 넣어줬다.
내가 어떤 함수를 만들었는지 점점 헷갈린다.
강의 출처: #37 Elevator Upgrade Class (Unity Tutorial | Tycoon idle game)
'유니티' 카테고리의 다른 글
[유니티] #13 광부 타이쿤 게임 만들기 (창고 업그레이드, 매니저 UI) (0) | 2025.02.01 |
---|---|
[유니티] #12 광부 타이쿤 게임 만들기 (엘리베이터 업그레이드) (0) | 2025.01.26 |
[유니티] Mathf.Log 함수와 레벨당 증가량 계산 (0) | 2025.01.24 |
[유니티] #10 광부 타이쿤 게임 만들기 (업그레이드 패널) (0) | 2025.01.23 |
[유니티] #9 광부 타이쿤 게임 만들기 (창고 광부, 로딩바) (0) | 2025.01.20 |