1인 개발/나홀로 성 지키기

나홀로 성 지키기 개인 프로젝트 9일차

잼잼재미 2024. 3. 27. 21:57

구현 내용


1. LevelUp 구현


 

버튼 클릭 시, 가지고 있는 코인으로 Player와 Castle의 경험치로 바꿀수 있도록 했다. 그리고 일정 경험치를 넘으면 레벨업을 하도록 구현했다.

 

 

public void PlayerExpButton()
{
    if(GameManager.I.DataManager.GameDataSO.Coin >= _expPrice)
    {
        GameManager.I.DataManager.GameDataSO.Coin -= _expPrice;
        _coinText.text = GameManager.I.DataManager.GameDataSO.Coin.ToString();
        _playerSO.CurrentExp += _exp;

        if (_playerSO.CurrentExp >= _playerSO.MaxExp)
        {
            _playerSO.CurrentExp -= _playerSO.MaxExp;
            _playerSO.Level++;
            _playerSO.MaxExp *= 1.5f;
            _playerLevelText.text = "Lv " + _playerSO.Level.ToString();
            PlayerLevelUp();
        }

        _playerExpSlider.value = _playerSO.CurrentExp / _playerSO.MaxExp;
    }
}

private void PlayerLevelUp()
{
    GameManager.I.SoundManager.StartSFX("LevelUp");
    _playerSO.Speed += 0.1f;
    _playerSO.Atk += 1f;
}

 

레벨마다 디자인을 하지 않고, 레벨업마다 Player의 능력치를 올리고 Exp는 일정 수를 곱했다.

 

 

2. 데이터 초기화 구현


 

모든 데이터는 ScriptableObject에 자동으로 저장되기 때문에 유니티 에디터 상에서도 수시로 데이터는 변한다. 그때마다 하나씩 데이터를 원래 값으로 변경하기 힘들기 때문에 데이터 초기화 기능을 만들었다.

 

 

public void DataReset()
{
    // Game Data
    GameDataSO.Stage = 1;
    GameDataSO.Coin = 0;

    // Player
    PlayerSO.Level = 1;
    PlayerSO.MaxExp = 10f;
    PlayerSO.CurrentExp = 0f;
    PlayerSO.Atk = 10f;
    PlayerSO.Speed = 3f;

    // Castle
    CastleSO.Level = 1;
    CastleSO.MaxExp = 10f;
    CastleSO.CurrentExp = 0f;
    CastleSO.Atk = 5f;
    CastleSO.Hp = 100f;
    CastleSO.AttackCoolTime = 5f;
}

 

위와 같이 DataManager에서 하나씩 초기화 값을 설정했다. 

 

 

3. Enemy LevelUp 구현


private void Start()
{
    _currentScene = GameManager.I.ScenesManager.CurrentSceneName;

    if(_currentStage % 5 == 0)
    {
        EnemyLevelUp();
    }
}

private void EnemyLevelUp()
{
    EnemySO[] meleeEnemySO = GameManager.I.DataManager.MeleeEnemySO;
    EnemySO[] rangedEnemySO = GameManager.I.DataManager.RangedEnemySO;
    for (int i = 0; i < meleeEnemySO.Length; i++)
    {
        meleeEnemySO[i].Atk *= 1.2f;
        meleeEnemySO[i].Hp *= 1.2f;
    }
    for (int i = 0; i < rangedEnemySO.Length; i++)
    {
        rangedEnemySO[i].Atk *= 1.2f;
        rangedEnemySO[i].Hp *= 1.2f;
    }
}

 

5의 배수의 Stage마다 DataManager에 접근해서 모든 Enemy의 Atk, Hp 1.2배 증가

 

 

4. Player, Castle Info 구현


 

로비 화면에서 Player와 Castle을 클릭하면 각각 Info 확인 가능

 

 

회고


전체적인 UI 작업이 대부분이었기 때문에 어렵다기보다는 지루했다. 내가 미적 감각이 정말 없다라는 것을 다시 한번 깨달았다. 전체적인 게임의 프로토 타입은 거의 완성을 했다. 이제 남은 것은 가장 어렵다고 생각했던 스킬 뽑기, 장착, 강화 부분이다. 일단은 스킬은 종류 별로 한가지 씩만 구현했기 때문에 최대한 많이 구현해야할 것 같다.