내일배움캠프 19일차 TIL
📌 Collider2D란?
Collider2D는 Unity 2D 물리 시스템에서 오브젝트의 경계를 정의해주는 컴포넌트. 이 컴포넌트를 통해 Unity는 “이 오브젝트가 다른 것과 맞닿았다”라는 사실을 알 수 있다.
대표적인 종류들
- BoxCollider2D: 사각형 영역. UI 버튼, 문, 캐릭터 등에 자주 사용.
- CircleCollider2D: 원형. 코인, 몬스터 탐지 범위 등에 좋음.
- PolygonCollider2D: 복잡한 모양도 가능.
- EdgeCollider2D: 선 형태. 지형 경계선 등.
💡 기억 포인트: Collider는 단순히 '경계'일 뿐! 충돌 계산을 하려면 이 Collider가 Rigidbody2D와 연결되어 있어야 함.
📌 Trigger란?
Collider2D 컴포넌트에는 Is Trigger라는 옵션이 존재한다. 이걸 체크하면 해당 오브젝트는 물리 충돌(튕기거나 멈추는 현상)을 하지 않고 “충돌했는지 감지만” 하게 됨.
예를 들어, Is Trigger가 체크된 오브젝트는 다른 오브젝트가 겹쳐도 그냥 통과한다. 하지만 OnTrigger 계열 이벤트는 발생해서 코드로 상호작용을 만들 수 있다.
대표 이벤트 함수들
| 함수 | 설명 |
| OnTriggerEnter2D(Collider2D other) | 다른 오브젝트가 Trigger 영역에 진입했을 때 1회 실행 |
| OnTriggerStay2D(Collider2D other) | Trigger 영역에 머무는 동안 매 프레임 실행 |
| OnTriggerExit2D(Collider2D other) | 영역을 벗어났을 때 실행 |
상호작용 조건 정리
이 조건이 안 맞으면 Trigger 이벤트는 실행되지 않음!
필수 조건 요약
| 항목 | 조건 |
| 최소 하나는 Rigidbody2D | 플레이어든 아이템이든 한 쪽은 Rigidbody2D 필수 |
| Collider2D | 양쪽 모두 필요 (겹침을 감지해야 하니까) |
| Trigger 체크 | 상호작용 대상 쪽은 Is Trigger 체크 |
| Tag 또는 이름 | 누구와 상호작용할지 코드에서 명확하게 구분해야 함 |
실전 예시 : 아이템 획득 상호작용 구현
시나리오
플레이어가 코인에 닿으면 → 코인이 사라지고 → 콘솔에 메시지 출력 (또는 인벤토리 추가 등 기능 확장 가능)
오브젝트 구성 예시
[플레이어]
- Rigidbody2D : ✅ 필수
- BoxCollider2D : ✅
- Tag를 "Player"로 설정 (스크립트에서 구분할 수 있도록)
[코인 오브젝트]
- CircleCollider2D : ✅
- Is Trigger 체크 : ✅
- ItemPickup.cs 스크립트 부착
스크립트 코드 예시
// ItemPickup.cs
using UnityEngine;
public class ItemPickup : MonoBehaviour
{
public string itemName = "Gold";
// Trigger에 들어왔을 때 한 번 실행됨
private void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
Debug.Log($"{itemName} 획득!");
// 여기서 인벤토리에 추가하는 코드 등도 넣을 수 있음
Destroy(gameObject); // 오브젝트 제거
}
}
}
💬 참고: CompareTag("Player")는 문자열 비교보다 성능이 좋고 실수를 줄여준다!
활용 예시 확장
| 활용 사례 | 설명 |
| 문 열기 | 플레이어가 문 앞 Trigger에 들어오면 애니메이션으로 문이 열림 |
| 대화 시작 | Trigger에 접근하면 “E키를 눌러 대화” UI 표시 |
| 아이템 줍기 | 상호작용 영역에서 아이템을 획득함 |
| 함정 발동 | 플레이어가 들어오면 즉시 데미지를 입히거나 가시 작동 |
| 스테이지 시작/종료 | 특정 구역에 들어오면 다음 씬으로 전환 |
OnTrigger가 작동하지 않을 때 점검할 체크리스트
- 한쪽 오브젝트에 Rigidbody2D가 있는가?
- Trigger로 사용할 오브젝트에 Is Trigger가 체크되어 있는가?
- Collider2D가 둘 다 붙어 있는가?
- 함수 이름이 정확히 OnTriggerEnter2D인지 확인했는가?
- Tag 이름 오타는 없는가?
- 레이어 설정이나 레이어 충돌 설정이 막혀있진 않은가? (Project Settings > Physics2D)
부가 팁
- Trigger와 UI 연동: Trigger에 들어오면 UIManager.ShowPopup() 등을 호출해 “Press E to Talk” 같은 UI 출력
- Trigger 범위 시각화: Gizmos.DrawWireSphere() 등을 활용해 개발 중 영역을 눈에 보이게 할 수 있음
- 플레이어 외에도 몬스터/아이템/트리거도 Rigidbody2D를 갖는 게 관리가 편할 수 있음
마무리 정리
Trigger는 게임의 “상호작용”을 구현하는 데 꼭 필요한 장치야.
Collider2D + Is Trigger + OnTriggerEnter2D라는 흐름을 기억해두면, 아이템 줍기, 문 열기, 대화 시스템, 함정 발동 등 거의 모든 상호작용을 만들 수 있을 것 같다.

'TIL' 카테고리의 다른 글
| 미니게임 UI 흐름 및 점수 갱신 관련 문제 해결 기록 (1) | 2025.05.07 |
|---|---|
| 카메라 추적 기능(Camera Follow) (1) | 2025.05.02 |
| PlayerPrefs로 최고 점수 저장하기 (1) | 2025.04.30 |
| Flappy Plane 만들며 기초 다지기 (1) | 2025.04.29 |
| 좋은 코드란 뭘까? (0) | 2025.04.28 |