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

Trigger와 충돌 이벤트

난이도초급
예상 시간45분
선수지식11강 2D 물리

12강. Trigger와 충돌 이벤트

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

택배가 구역에 도착해도 게임은 결과를 모릅니다. 물리 반발은 필요 없고 겹침 사실만 필요하므로 Trigger 이벤트로 결과를 전달합니다.

2. 학습 목표​

3. 핵심 개념​

일반 Collision은 물리 접촉과 반응을 계산합니다. Trigger는 통과를 허용하면서 겹침 콜백을 보냅니다. 2D Trigger 이벤트에는 적어도 한쪽에 Rigidbody2D가 있어야 하며, Collider2D의 Is Trigger 설정을 확인해야 합니다.

4. 단계별 실습​

C# · 파일 경로: Assets/DeliverySorter/Scripts/Packages/PackageItem.cs

PackageItem.cs
using UnityEngine;

public enum PackageKind { Blue, Orange }

public sealed class PackageItem : MonoBehaviour
{
[SerializeField] private PackageKind kind;
public PackageKind Kind => kind;
public bool IsResolved { get; private set; }

public bool TryResolve()
{
if (IsResolved) return false;
IsResolved = true;
return true;
}
}

C# · 파일 경로: Assets/DeliverySorter/Scripts/Zones/SortZone.cs

SortZone.cs
using UnityEngine;

public sealed class SortZone : MonoBehaviour
{
[SerializeField] private PackageKind acceptedKind;

private void OnTriggerEnter2D(Collider2D other)
{
if (!other.TryGetComponent(out PackageItem package)) return;
if (!package.TryResolve()) return;

bool isCorrect = package.Kind == acceptedKind;
Debug.Log(isCorrect ? "Correct sort" : "Wrong sort", package);
Destroy(package.gameObject);
}
}

Inspector 연결 작업

  1. 두 Zone의 BoxCollider2D에서 Is Trigger를 켭니다.
  2. BlueZone에는 Blue, OrangeZone에는 Orange를 지정합니다.
  3. Package Prefab에 PackageItem을 추가하고 타입을 바꾼 두 인스턴스로 시험합니다.
  4. MissZone은 같은 패턴으로 TryResolve 후 놓침 로그를 남깁니다.

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

택배 Rigidbody2D가 Trigger Collider2D와 처음 겹치면 Unity가 콜백을 호출합니다. Zone은 TryGetComponent로 택배만 받고 TryResolve의 상태 잠금으로 두 구역이나 중복 콜백이 같은 결과를 두 번 처리하지 못하게 합니다.

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

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Unity 충돌 이벤트 점검

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

0 / 2
  1. 문제 1물리적으로 튕기게 하지 않고 배송 구역 진입만 감지하려면 어떤 설정이 알맞은가요?
  2. 문제 22D Trigger 이벤트가 호출되기 위한 일반적인 구성은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

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

12강. Trigger와 충돌 이벤트 미완료 상태