본문으로 건너뛰기
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와 충돌 이벤트 미완료 상태