본문으로 건너뛰기
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강. 게임 상태 관리 미완료 상태