점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기
10강. 점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기
1. 이번 강의에서 해결할 문제
판정 결과는 나오지만 점수와 목숨의 단일 원본이 없습니다. UI가 규칙을 계산하지 않도록 GameSession이 상태를 소유하고 변경 이벤트만 알립니다.
2. 학습 목표
3. 핵심 개념
GameSession은 런타임 규칙의 단일 원본이지만 생성·입력·UI·사운드까지 처리하는 만능 GameManager가 아닙니다. 택배 결과를 받아 수치만 계산하고 ScoreChanged, LivesChanged, RunEnded 이벤트를 발행합니다.
4. 단계별 실습
C# · PackageSpawner.cs에 추가
using System;
public event Action<PackageActor> Spawned;
// SpawnLoop에서 Initialize 다음 줄
Spawned?.Invoke(package);
C# · 파일 경로: Assets/_Project/Scripts/Core/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. 핵심 요약
점수와 목숨 관리: 게임 규칙과 UI를 이벤트로 연결하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.