본문 바로가기
게임 개발 일지/내일배움캠프 TIL

[Unity] 게임 진행에 따라 round 표시하기

by 빛하_ 2024. 1. 31.
최종 프로젝트 개발 일지 #3

 

 

GameScene에서 게임 진행을 위해 Timer 로직과 함께 필요한 UI가 있다. 바로 round이다.

이번 프로젝트의 게임은 3판2선승 제를 취하고 있기 때문에, 플레이어의 점수에 따라 라운드를 잘 표시해줄 필요가 있었다.

내가 생각한 로직은 round 옆의 숫자를 조절할 수 있는 메서드를 따로 만들고 이를 제어하는 컴포넌트로 timer를 선택해 GameScene_UI 내에서 timer와 round가 처리될 수 있도록 구현하는 것이다. 

 

 // RoundLogic.cs
 public void RoundIndex()
 {
     int scoreRed;
     int scoreBlue;
     int.TryParse(TeamRedScore.text, out scoreRed);
     int.TryParse(TeamBlueScore.text, out scoreBlue);

     roundTxt.text = currentRound.ToString();

     if (scoreRed == 1 || scoreBlue == 1)
     {
         currentRound = 2;
         roundTxt.text = currentRound.ToString();
     }
     if (scoreRed == 1 && scoreBlue == 1)
     {
         currentRound = 3;
         roundTxt.text = currentRound.ToString();
     }
     if (scoreRed == 2 || scoreBlue == 2)
     {
         currentRound = 3;
         roundTxt.text = currentRound.ToString();
     }
 }

 public void GameOver()
 {
     VictoryPanel.SetActive(true);
 }

 

Round 숫자를 바꾸는 로직은 RoundIndex()라는 메서드에서 score의 int 값을 인식해 조건문으로 처리하는 것이다.

1대1 상황에서만 3라운드로 넘어가고, 2대0 또는 2대1이 되면 게임이 종료된다.

// RoundTimer.cs
void StartFarmingTimer()
{
...
        if (scoreRed == 1 || scoreBlue == 1)
        {
            roundLogic.RoundIndex();

            StopCoroutine(BattleTimer());
            StartCoroutine(FarmingTimer());
        }

        else if (scoreRed == 1 && scoreBlue == 1)
        {
            roundLogic.RoundIndex();

            StopCoroutine(BattleTimer());
            StartCoroutine(FarmingTimer());
        }

        if ((scoreRed == 2) || (scoreBlue == 2))
        {
            roundLogic.RoundIndex();
            roundLogic.GameOver();
            StopAllCoroutines();
        }
        
...
}

 

RoundIndex()메서드를 호출하는 곳은 RoundTimer.cs에 있는 StartFarmingTimer이다.

Timer에서도 똑같이 score의 int 값을 인식해 페이즈에 따라 타이머 코루틴을 닫고 열기 때문에

겹치는 조건 없이 round를 넘길 수 있다.

 

댓글