Menu
CoddyTech

복습: 라운드 관리자

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 16번째.

이 장에서는 게임에 관리자 하나를 두었습니다. 다른 객체가 필드 없이도 접근할 수 있는 싱글턴과, 그 싱글턴이 전환하는 상태들입니다. 라운드 관리자는 이 둘을 모두 활용합니다.

challenge icon

챌린지

쉬움

코인 줍기를 완료하세요. SetState는 작성되어 있습니다.

  1. public static RoundManager Instance;를 추가하고, Awake()에서 설정하세요.
  2. Update()에서 state에 따라 분기하세요. Ready 상태에서는 Space 입력을 기다리고, Playing 상태에서는 timeLeft를 카운트다운한 다음 다음 Ready 상태로 넘어가거나 마지막 라운드가 끝난 후 Finished 상태로 넘어갑니다.
  3. 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 상태일 때만 코인이 집계됨
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드