본문으로 건너뛰기
Unity C# 기초집LESSON 15

게임 상태 관리

난이도초급
예상 시간45분
선수지식14강 HUD

15강. 게임 상태 관리

1. 이번 강의에서 해결할 문제

목숨이 0이어도 택배가 계속 생성되고 입력도 작동합니다. 여러 bool 대신 명시적인 상태와 전환 메서드로 게임 흐름을 통제합니다.

2. 학습 목표

3. 핵심 개념

상태는 동시에 하나만 유효해야 합니다. IsPlaying, IsPaused, IsGameOver bool이 서로 모순되지 않도록 enum과 전환 메서드를 사용합니다. GameSession은 모든 기능을 품는 관리자가 아니라 세션 규칙만 소유합니다.

4. 단계별 실습

C# · 파일 경로: Assets/DeliverySorter/Scripts/Game/GameSession.cs

GameSession.cs
using UnityEngine;

public enum GameState { Ready, Playing, Paused, GameOver }

public sealed class GameSession : MonoBehaviour
{
[SerializeField, Min(1)] private int startingLives = 3;

public GameState State { get; private set; } = GameState.Ready;
public int Score { get; private set; }
public int Lives { get; private set; }

private void Awake()
{
Lives = startingLives;
}

public void StartGame()
{
Score = 0;
Lives = startingLives;
State = GameState.Playing;
Time.timeScale = 1f;
}

public void AddScore(int amount)
{
if (State == GameState.Playing) Score += Mathf.Max(0, amount);
}

public void LoseLife()
{
if (State != GameState.Playing) return;
Lives = Mathf.Max(0, Lives - 1);
if (Lives == 0) State = GameState.GameOver;
}

public void SetPaused(bool paused)
{
if (State == GameState.Ready || State == GameState.GameOver) return;
State = paused ? GameState.Paused : GameState.Playing;
Time.timeScale = paused ? 0f : 1f;
}
}

Inspector 연결 작업

Systems/GameSession을 만들고 스크립트를 추가합니다. 임시 UI Button 또는 ContextMenu 호출로 StartGame, LoseLife와 Pause를 순서대로 시험합니다.

5. 코드가 동작하는 이유

상태 변경 통로를 메서드로 제한해 Playing일 때만 점수와 목숨이 바뀝니다. 목숨은 0 아래로 내려가지 않고 마지막 목숨을 잃는 순간 GameOver로 전환됩니다. timeScale은 이동·일반 Coroutine을 멈추지만 UI와 입력 차단은 상태도 함께 확인해야 합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

게임 상태 관리 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1다음 중 “게임 상태 관리”의 핵심 요약을 실제 상황에 맞게 적용한 것은 무엇인가요?
  2. 문제 2“게임 상태 관리” 실습 중 ‘timeScale만 0이면 모든 입력이 멈춘다고 생각’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

15강. 게임 상태 관리 미완료 상태