판정 시스템: 올바른 분류·오분류·놓침을 한 번만 처리하기
9강. 판정 시스템: 올바른 분류·오분류·놓침을 한 번만 처리하기
1. 이번 강의에서 해결할 문제
한 택배가 Zone 경계와 MissZone에 연속으로 닿으면 점수와 목숨이 둘 다 바뀔 수 있습니다. 첫 판정만 성공하도록 택배가 해결 상태를 소유합니다.
2. 학습 목표
3. 핵심 개념
Collider2D Trigger는 접촉 사실을 전달할 뿐 점수 규칙을 소유하지 않습니다. SortZone은 허용 데이터와 택배 정의를 비교해 결과를 계산하고 PackageActor 이벤트로 알립니다. TryResolve가 false면 이미 처리된 택배입니다.
4. 단계별 실습
C# · 파일 경로: Assets/_Project/Scripts/Gameplay/PackageOutcome.cs
namespace DeliverySorter.Gameplay
{
public enum PackageOutcome { Correct, Wrong, Missed }
}
C# · PackageActor.cs에 추가
using System;
public event Action<PackageActor, PackageOutcome> Resolved;
public bool IsResolved { get; private set; }
public bool TryResolve(PackageOutcome outcome)
{
if (IsResolved) return false;
IsResolved = true;
Resolved?.Invoke(this, outcome);
return true;
}
Initialize 시작에서 IsResolved = false;를 설정합니다.
C# · 파일 경로: Assets/_Project/Scripts/Gameplay/SortZone.cs
using DeliverySorter.Data;
using UnityEngine;
namespace DeliverySorter.Gameplay
{
public sealed class SortZone : MonoBehaviour
{
[SerializeField] private PackageDefinition acceptedDefinition;
private void OnTriggerEnter2D(Collider2D other)
{
if (!other.TryGetComponent(out PackageActor package) || package.Definition == null) return;
PackageOutcome outcome = package.Definition == acceptedDefinition
? PackageOutcome.Correct : PackageOutcome.Wrong;
package.TryResolve(outcome);
}
}
}
C# · 파일 경로: Assets/_Project/Scripts/Gameplay/MissZone.cs
using UnityEngine;
namespace DeliverySorter.Gameplay
{
public sealed class MissZone : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D other)
{
if (other.TryGetComponent(out PackageActor package))
package.TryResolve(PackageOutcome.Missed);
}
}
}
Inspector 연결 작업: 각 SortZone에 정확한 PackageDefinition을 할당하고 모든 Zone Collider2D의 Is Trigger를 켭니다. Package Prefab에는 Collider2D와 Rigidbody2D 중 하나 이상의 물리 구성이 필요합니다.
테스트 작업: Zone을 겹쳐 같은 택배가 두 Trigger에 들어가도 이벤트가 한 번만 발생하는지 임시 로그로 확인합니다.
5. 코드가 동작하는 이유
첫 Trigger만 IsResolved를 true로 바꾸고 이벤트를 발생시킵니다. 뒤의 Trigger는 false를 받아 아무 결과도 만들지 않습니다. Zone은 결과 종류만 정하고 점수·목숨 처리는 다음 GameSession이 맡습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
판정 시스템: 올바른 분류·오분류·놓침을 한 번만 처리하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.