Unity의 기본 업그레이드 시스템
많은 게임에서 플레이어는 기지나 건물을 업그레이드하여 추가 기능을 잠금 해제하고, 방어력을 강화하거나, 생산 속도를 높일 수 있습니다. 이 튜토리얼은 Unity에서 기지 업그레이드 시스템을 설정하는 방법을 안내하여 각 레벨에서 시각적, 기능적 변경을 통해 건물을 여러 레벨로 업그레이드할 수 있도록 합니다.
1. 기본 구조 설정
먼저, 기지의 레벨, 체력, 생산 속도와 같은 속성을 정의하는 Base
스크립트를 만듭니다. 각 레벨 업그레이드는 이러한 속성을 수정합니다.
using UnityEngine;
public class Base : MonoBehaviour
{
public int level = 1;
public int health = 100;
public int productionRate = 10;
public void UpgradeBase()
{
level++;
health += 50; // Increase health by 50 with each level
productionRate += 5; // Increase production rate by 5 with each level
Debug.Log("Base upgraded to level " + level);
}
}
이 Base
스크립트에는 레벨을 증가시키고 기지의 속성을 업그레이드하는 간단한 UpgradeBase()
메서드가 포함되어 있습니다. 이 스크립트를 씬의 기본 GameObject에 첨부합니다.
2. 업그레이드 관리자 생성
다음으로, 플레이어가 업그레이드할 만큼 충분한 화폐를 가지고 있는지 확인하는 것을 포함하여 기본 업그레이드를 관리하는 UpgradeManager
스크립트를 만듭니다.
using UnityEngine;
public class UpgradeManager : MonoBehaviour
{
public Base playerBase;
public int upgradeCost = 100;
public void AttemptUpgrade()
{
if (CurrencySystem.Instance.SpendCurrency(upgradeCost))
{
playerBase.UpgradeBase();
upgradeCost += 50; // Increase the cost for each upgrade
}
else
{
Debug.Log("Not enough currency to upgrade.");
}
}
}
이 UpgradeManager
스크립트를 GameObject에 연결하고, 기본 GameObject를 playerBase
필드에 할당하고, 초기 upgradeCost
을 설정합니다. 업그레이드할 때마다 비용이 증가하여 향후 업그레이드가 더 어려워집니다.
3. 통화 시스템 설정
업그레이드 비용을 관리하려면 플레이어의 통화를 추적하고 사용하는 간단한 방법으로 CurrencySystem
을 추가합니다. 다음은 예입니다.
using UnityEngine;
public class CurrencySystem : MonoBehaviour
{
public static CurrencySystem Instance;
public int currency = 500;
private void Awake()
{
if (Instance == null)
Instance = this;
else
Destroy(gameObject);
}
public bool SpendCurrency(int amount)
{
if (currency >= amount)
{
currency -= amount;
Debug.Log("Currency spent: " + amount + ". Remaining: " + currency);
return true;
}
else
{
Debug.Log("Not enough currency.");
return false;
}
}
public void AddCurrency(int amount)
{
currency += amount;
Debug.Log("Currency added: " + amount + ". Total: " + currency);
}
}
이 CurrencySystem
을 장면의 GameObject에 연결합니다. 싱글톤 패턴은 UpgradeManager
과 같은 다른 스크립트에서 쉽게 액세스할 수 있게 해줍니다.
4. 레벨당 비주얼 및 효과 업데이트
각 기본 업그레이드를 시각적으로 구별되게 하려면 각 레벨에 다른 모델이나 텍스처와 같은 변형을 추가합니다. 예를 들어:
- 각 기본 레벨에 대해 여러 개의 3D 모델을 만들거나 다양한 질감/소재를 준비하세요.
Base
클래스에 코드를 추가하여 레벨이 올라갈 때마다 모델이나 재료를 교체합니다.
Base
스크립트에서 시각적 요소를 업데이트하기 위한 코드 조각은 다음과 같습니다.
public GameObject[] levelModels; // Assign each level's model in Inspector
public void UpgradeBase()
{
level++;
health += 50;
productionRate += 5;
UpdateBaseModel();
}
void UpdateBaseModel()
{
for (int i = 0; i < levelModels.Length; i++)
{
levelModels[i].SetActive(i == level - 1);
}
}
이 코드는 기지의 현재 레벨과 일치하는 모델을 활성화하고 다른 모델은 비활성화합니다.
5. 업그레이드를 위한 UI 생성
다음으로, 플레이어가 업그레이드를 시작하고 기지의 현재 레벨을 추적할 수 있도록 UI 요소를 만듭니다. 이를 위해:
- "Upgrade Base"이라는 라벨이 있는 캔버스를 만듭니다.
- 이 버튼에
OnClick
이벤트를 연결하고 이를UpgradeManager
의AttemptUpgrade
메서드에 연결합니다. - 플레이어에게 업그레이드 진행 상황에 대한 피드백을 제공하기 위해 UI에 기지의 레벨, 체력, 생산 속도를 표시합니다.
6. 업그레이드 시스템 테스트
게임을 실행하고 "Upgrade Base" 버튼을 클릭합니다. 업그레이드할 때마다 기지의 속성이 증가하고 비주얼도 그에 따라 변경됩니다. 디버그 로그를 사용하여 통화 변경 및 레벨 조정을 확인합니다.
시스템 확장
이 기본 업그레이드 시스템은 다음을 추가하여 확장할 수 있습니다.
- 독특한 속성과 시각적인 향상을 갖춘 새로운 레벨.
- 화폐 이외의 자원, 예를 들어 재료나 시간 등의 요구 사항.
- 업그레이드를 위한 특수 효과(입자 효과나 사운드 피드백 등)
결론
Unity에서 동적 속성 증가, 간단한 통화 확인, 업그레이드 UI를 특징으로 하는 기본 업그레이드 시스템을 만들었습니다. 이 시스템은 여러 단계 업그레이드 및 각 레벨에 대한 고유한 비주얼과 같은 더 복잡한 메커니즘을 게임에 추가하기 위한 기반을 제공합니다.