최종 프로젝트 개발 일지 #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를 넘길 수 있다.
'게임 개발 일지 > 내일배움캠프 TIL' 카테고리의 다른 글
[C#] 스택과 힙, 값과 참조, 동적/정적 할당 (0) | 2024.02.02 |
---|---|
[C#] 델리게이트와 이벤트, action과 func (1) | 2024.02.01 |
[Unity] 2가지 타이머 적용하기(코루틴) (0) | 2024.01.30 |
[C#] 인터페이스와 추상클래스 / 스택과 큐의 차이 (1) | 2024.01.26 |
[Unity] 같은 scene 에서 오브젝트 간 생성 순서 정하기 (1) | 2024.01.25 |
댓글