클리키 게임 중 내 역할은 플레이어 능력치 및 업그레이드였고 필수적으로 데이터 테이블을 ScriptableObject를 이용하여 수치 증가량 테이블을 만들고 업그레이드에 따른 능력치를 산출해야 했다.
일단 내가 만들어야할 능력치는 치명타, 자동공격, 골드획득량 추가이다.
치명타 데미지(공격력 및 확률), 자동공격 로직, 골드획득 로직은 다른분들이 맡아주셨으나 내쪽에서 능력치를 보내주면 그 능력치만큼 기능이 작동될 수 있게 수치를 잘 맞춰야 했다.
[CreateAssetMenu(fileName = "PlayerStat", menuName = "Scriptable Object Asset/PlayerStat")]
public class PlayerStat : ScriptableObject
{
Player player;
public int criticalChanceBonus = 0; // 치명타 확률
public int goldChanceBonus = 0; // 골드획득량
public int autoClickBonus = 0; // 자동클릭횟수
public int upgradeGold = 5; // 임시 초기강화비용
public void UpgradeCriticalChanceBonus()
{
if (player.gold >= upgradeGold)
{
player.gold -= upgradeGold; // 골드 차감
criticalChanceBonus += 1;
upgradeGold = Mathf.RoundToInt(upgradeGold * 1.2f); // 강화 비용 20% 증가
}
}
}
그리하여 내가 처음에 구상했던건 능력치별로 변수를 만들어 값을 관리하는거였다, 일단 초기에 작성할땐 보너스 값만 작성했다.
업그레이드 되는 로직은 소지중인 골드에서 업그레이드 시 필요한 골드를 차감, 업그레이드 하려는 스탯+1, 업그레이드 골드는 한번 진행되면 1.2배 증가되게 해주었다.
[CreateAssetMenu(fileName = "PlayerStat", menuName = "Scriptable Object Asset/PlayerStat")]
public class PlayerStat : ScriptableObject
{
// 기본값
[Header("StatBonus")]
public int criticalBonus; // 치명타 데미지
public int goldChanceBonus; // 골드획득량
public int autoClickBonus; // 자동클릭횟수
// 증가율
[Header("StatBonusNum")]
public int criticalBonusup; // 치명타 데미지
public int goldChanceBonusup; // 골드획득량
public int autoClickBonusup; // 자동클릭횟수
// 강화비용 및 증가율
[Header("Gold")]
public int upgradeGold; // 초기강화비용
public float upgradePercent; // 강화비용 증가 퍼센트
public void UpgradeBonus()
{
criticalBonus += 1; // 크리티컬 보너스 증가
goldChanceBonus += goldChanceBonusup;
autoClickBonus += autoClickBonusup;
upgradeGold = Mathf.RoundToInt(upgradeGold * upgradePercent); // 강화 비용 증가
}
}
근데 너무 지저분하기도 해서 조금 정리해주었다.
근데 이렇게 했을 때 단점은 인스펙터 창이 너무 더럽다는 점이다...
값이 명확하게 있어 다른곳에서도 가져오거나 보내기 쉽다는 장점은 있으나 코드가 길어지기도 하고 인스펙터 창에 사용하지 않는 스탯들도 노출되어 있어 보기가 불편했다.
이러한 점을 어떤식으로 보완해야 할까 하던 중 조원분께서 enum으로 타입을 정리해보는건 어떠시냐 해서 도전해보려고 한다.
enum으론 직업이나 다른 종류들만 분류해본적이 있었는데, 이것을 값으로 분류해줄려고 하니 처음엔 오 좋다 했다가 막상 작성하면서 좀 막막한 부분이 많았는데 이건 열심히 작성해봐야겠다.
'Unity > Unity Study' 카테고리의 다른 글
[Unity] 클리키 게임 팀 프로젝트 중, 여러번 눌림 현상 (0) | 2025.04.03 |
---|---|
[Unity] 개인과제, ATM 만들기 - 송금 (0) | 2025.03.31 |
[Unity] 개인과제, ATM 만들기 - JSON을 이용한 유저 저장 (0) | 2025.03.28 |
[Unity] 개인과제, ATM 만들기 - PlayerPrefs를 통한 유저 저장 (0) | 2025.03.26 |
[Unity] 개인과제, ATM 만들기 - 입금, 송금 (0) | 2025.03.25 |