본문으로 건너뛰기
게임 프로젝트 기초집LESSON 10

점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기

난이도초급 프로젝트
예상 시간55분
선수지식9강 분류 판정 시스템

10강. 점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기

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

판정 결과는 나오지만 점수와 목숨의 단일 원본이 없습니다. UI가 규칙을 계산하지 않도록 GameSession이 상태를 소유하고 변경 이벤트만 알립니다.

2. 학습 목표​

3. 핵심 개념​

GameSession은 런타임 규칙의 단일 원본이지만 생성·입력·UI·사운드까지 처리하는 만능 GameManager가 아닙니다. 택배 결과를 받아 수치만 계산하고 ScoreChanged, LivesChanged, RunEnded 이벤트를 발행합니다.

4. 단계별 실습​

C# · PackageSpawner.cs에 추가

PackageSpawner.cs
using System;
public event Action<PackageActor> Spawned;

// SpawnLoop에서 Initialize 다음 줄
Spawned?.Invoke(package);

C# · 파일 경로: Assets/_Project/Scripts/Core/GameSession.cs

GameSession.cs
using System;
using DeliverySorter.Data;
using DeliverySorter.Gameplay;
using UnityEngine;

namespace DeliverySorter.Core
{
public sealed class GameSession : MonoBehaviour
{
[SerializeField] private GameRules rules;
public int Score { get; private set; }
public int Lives { get; private set; }
public int Combo { get; private set; }
public event Action<int> ScoreChanged;
public event Action<int> LivesChanged;
public event Action RunEnded;

public void ResetRun()
{
Score = 0;
Lives = rules.StartingLives;
Combo = 0;
ScoreChanged?.Invoke(Score);
LivesChanged?.Invoke(Lives);
}

public void Track(PackageActor package)
{
package.Resolved += HandleResolved;
}

private void HandleResolved(PackageActor package, PackageOutcome outcome)
{
package.Resolved -= HandleResolved;
if (outcome == PackageOutcome.Correct)
{
Combo++;
Score += package.Definition.Score;
if (Combo % rules.ComboStep == 0) Score += rules.ComboBonus;
ScoreChanged?.Invoke(Score);
}
else
{
Combo = 0;
Lives = Mathf.Max(0, Lives - rules.WrongSortPenalty);
LivesChanged?.Invoke(Lives);
if (Lives == 0) RunEnded?.Invoke();
}
Destroy(package.gameObject);
}
}
}

Unity Editor·Inspector 작업: GameSession GameObject에 스크립트를 붙이고 DefaultGameRules.asset을 할당합니다.

Inspector 연결 작업: 작은 GameBindings 컴포넌트 또는 UnityEvent가 아니라 코드 구독으로 spawner.Spawned += session.Track을 연결하고 OnDisable에서 해제합니다. 매 프레임 Find하지 않습니다.

테스트 작업: 정답, 오분류, 놓침에서 Score·Lives·Combo를 Inspector Debug와 임시 로그로 확인합니다. 중복 판정에서도 한 번만 바뀌어야 합니다.

5. 코드가 동작하는 이유​

GameSession은 판정 이벤트를 한 번 받아 규칙 에셋 값으로 런타임 상태를 갱신합니다. UI는 다음 강의에서 숫자 이벤트만 구독하므로 점수 계산식을 몰라도 됩니다. 이벤트 구독 해제가 오래된 택배 참조를 남기지 않습니다.

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

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기 미니 퀴즈

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

0 / 2
  1. 문제 1“점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기” 내용을 실제 작업에 적용한 설명으로 가장 알맞은 것은 무엇인가요?
  2. 문제 2“점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기”에서 ‘모든 기능을 Session에 추가’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

10강. 점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기 미완료 상태