개발일지/Unity 6 [미제]

[Unity 6 - 프로젝트] 리듬 게임 3) Score & Combo System 개발

서니션 2024. 10. 26. 16:04

0. 들어가며

오늘은 노트를 맞게 눌렀을 때 점수 증가와, Combo를 계산하여 Combo당 곱해지는 점수도 계산해보려고 한다.


1. Canvas에서 ScoreText와 MultiplierText를 표시할 UI 생성

 

왼쪽 아래에 텍스트를 넣어주었다.


2. 점수 계산을 해 줄 GamaManager.cs 작성

 

점수 계산, 콤보 계산, UI에 띄워주기 위한 변수를 선언한다.

    public int currentScore; // 점수 합계
    public int scorePerNote = 100; // 노트 점수

    public int currentMultiplier;
    public int multiplierTracker;
    public int[] multipleierThresholds;

    public Text scoreText; // UI에 띄워줄 텍스트를 위함
    public Text multiText;

 

Start()에서 게임 시작 전 기본 Score : 0 임을 text UI에 지정해주고,

콤보의 기본 값을 1로 설정해준다. 0이 아닌 이유는 곱해져야 하는 값이기 때문이다.

    void Start()
    {
        instance = this;
        scoreText.text = "Score: 0"; // 처음 시작 시 점수는 0
        currentMultiplier = 1; // 기본 값, 곱해야 하기 때문에 1
    }

 

GameManager Script Component

 

 

  • 점수 배수 관리: 기본적으로 플레이어가 노트를 맞추면 scorePerNote에 의해 점수가 올라가지만, currentMultiplier는 이 점수를 곱하는 배수입니다. 배수가 높을수록 한 번의 노트로 더 많은 점수를 얻을 수 있습니다.
  •  
    점수식 : currentScore += scorePerNote * currentMultiplier;
  • 콤보에 따른 배수 증가: 플레이어가 여러 노트를 연속으로 맞추면 multiplierTracker가 증가하고, 특정 조건(multipleierThresholds)이 충족되면 currentMultiplier가 증가합니다. 이렇게 배수가 올라가면서 점수도 빠르게 올라갑니다.
  • 노트를 놓쳤을 때 리셋: 플레이어가 노트를 놓치면 콤보와 함께 currentMultiplier가 다시 1로 초기화됩니다. 이로 인해 점수가 다시 기본 배수로 돌아가며, 더 많은 노트를 맞춰야 다시 배수가 올라갑니다.
public void NoteHit()
    {
        Debug.Log("Hit On Time");

        // 배수가 배열의 길이를 초과하지 않는지 확인
        if (currentMultiplier - 1 < multipleierThresholds.Length)
        {
            multiplierTracker++; // 조건 충족했으니 증가

            // 현재 배수를 증가시키기 위해 조건을 만족하는지 체크
            if (multipleierThresholds[currentMultiplier - 1] <= multiplierTracker)
            {
                multiplierTracker = 0; // 초기화
                currentMultiplier++; // 증가
            }
        }

        // 콤보 텍스트 UI에 표시
        multiText.text = "Multiplier: x" + currentMultiplier;

        currentScore += scorePerNote * currentMultiplier; // 점수 = 기본 값 * 콤보 값
        scoreText.text = "Score: " + currentScore; // 점수 텍스트 UI에 표시

    }

    public void NoteMissed()
    {
        Debug.Log("Missed Note");

        // 놓쳤을 경우 콤보는 다시 0
        currentMultiplier = 1;
        multiplierTracker = 0;
        multiText.text = "Multiplier: x" + currentMultiplier;
    }

 


3. 결과

Score, Muiltiplier가 계산과 조건에 따라 표시가 되는 것을 확인할 수 있다.