복습: 라운드 관리자
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 16번째.
이 장에서는 게임에 관리자 하나를 두었습니다. 다른 객체가 필드 없이도 접근할 수 있는 싱글턴과, 그 싱글턴이 전환하는 상태들입니다. 라운드 관리자는 이 둘을 모두 활용합니다.
챌린지
쉬움코인 줍기를 완료하세요. SetState는 작성되어 있습니다.
public static RoundManager Instance;를 추가하고,Awake()에서 설정하세요.Update()에서state에 따라 분기하세요. Ready 상태에서는 Space 입력을 기다리고, Playing 상태에서는timeLeft를 카운트다운한 다음 다음 Ready 상태로 넘어가거나 마지막 라운드가 끝난 후 Finished 상태로 넘어갑니다.public bool TakeCoin(): Playing 상태일 때만 코인을 세고,Coins: 2를 표시한 다음 true를 반환하세요.Coin.cs는 Player가 닿은 코인 중 획득한 코인을 파괴합니다.
세 라운드 모두 ‘플레이’를 누르세요. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using UnityEngine;
using TMPro;
public enum RoundState { Ready, Playing, Finished }
public class RoundManager : MonoBehaviour
{
// 싱글턴: static Instance이며 Awake()에서 설정됨
public GameObject readyPanel;
public GameObject playPanel;
public GameObject finishedPanel;
public TMP_Text roundText;
public TMP_Text coinsText;
public TMP_Text finalText;
public int rounds = 3;
public float roundTime = 4f;
private RoundState state;
private int round = 1;
private int coins;
private float timeLeft;
void Start()
{
SetState(RoundState.Ready);
}
void Update()
{
// state에 따라 분기: Ready는 Space를 기다리고, Playing은 남은 시간을 줄임
}
void SetState(RoundState next)
{
state = next;
readyPanel.SetActive(next == RoundState.Ready);
playPanel.SetActive(next == RoundState.Playing);
finishedPanel.SetActive(next == RoundState.Finished);
if (next == RoundState.Ready) roundText.text = "Round " + round;
if (next == RoundState.Playing) timeLeft = roundTime;
if (next == RoundState.Finished) finalText.text = "Coins: " + coins;
}
// TakeCoin(): Playing 상태일 때만 코인이 집계됨
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
실제 게임 만들기의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드