1교시의 도착점
학생은 Unity를 따라 조작하지 않습니다. 교수자의 장면 시연과 코드 판독을 보며 접촉이 사건으로 바뀌는 조건과 흐름을 설명합니다.
- 형식교수자 이론과 시연
- 핵심 구분Collision / Trigger
- 학생 활동예측 / 코드 추적
- 01
Collision과 Trigger가 움직임에 주는 결과를 구분합니다.
- 02
2D Trigger callback에 필요한 Collider2D와 Rigidbody2D 조건을 설명합니다.
- 03
OnTriggerEnter2D(Collider2D other)의 parameter가 무엇을 가리키는지 읽습니다. - 04
Layer, Tag, Sorting Layer가 각각 물리 필터, 정체성, 그림 순서를 담당함을 구분합니다.
- 4주차 회수
Rigidbody2D와 Collider2D가 Player와 Wall에서 맡았던 책임을 복원합니다.
- 접촉 성립 조건
Collider 형상, Rigidbody2D, Layer 규칙이 만나는 순서를 봅니다.
- Collision과 Trigger
물리적 분리와 겹침 callback의 차이를 같은 장면에서 비교합니다.
- Trigger 생명주기
Enter, Stay, Exit 중 이번 주에 필요한 Enter의 의미를 구분합니다.
- 상대 식별
Layer, Tag, CompareTag와 other parameter를 하나의 판단으로 연결합니다.
- 코드 시연과 회수
값을 바꾸기 전에 결과를 예측하고 세 질문으로 개념을 회수합니다.
겹쳐 보인다고 바로 사건이 되지는 않습니다
Trigger callback이 오기까지 네 개의 문을 통과합니다. 이 흐름을 알면 “코드는 맞는데 반응하지 않는다”는 문제를 Inspector와 Project Settings에서 나누어 찾을 수 있습니다.
두 GameObject에 접촉을 계산할 2D 형상이 있어야 합니다.
Trigger 이벤트를 보내려면 두 Collider 중 적어도 한쪽에 Rigidbody2D가 있어야 합니다.
두 Layer 조합의 접촉이 Project Settings에서 허용되어야 합니다.
꺼져 있으면 물리 충돌, 켜져 있으면 겹침과 callback이 됩니다.
이번 수업의 표준 구성
4주차 Player에는 이미 Rigidbody2D와 Collider2D가 있습니다. 따라서 수집물, 위험, 목표 오브젝트에는 Collider2D를 붙이고 Is Trigger를 켜는 것만으로 Trigger 쪽에 별도 Rigidbody2D를 추가하지 않아도 됩니다.
Player가 통과하면서 수집 사건을 보내야 한다면?
원하는 물리 결과를 기준으로 선택합니다.
Collision은 공간을 지키고, Trigger는 사건을 알립니다
둘 다 Collider2D의 형상을 사용하지만 목적이 다릅니다. 물리적 벽과 상호작용 구역을 같은 방식으로 설정하면 레벨의 의미가 흐려집니다.
겹침을 해결합니다
물리 엔진이 Collider가 서로 파고들지 않도록 위치와 속도를 해결합니다. 벽, 바닥, 움직일 수 없는 장애물에 사용합니다.
겹침을 허용하고 알립니다
물리적 차단은 하지 않고 Enter, Stay, Exit callback을 보냅니다. 수집물, 위험 구역, 목표 지점에 사용합니다.
OnTriggerEnter2D. 한 번 발생해야 하는 수집, 리셋, 목표 판정에 적합합니다.
OnTriggerStay2D. 물리 step마다 반복됩니다. 이번 주의 일회성 사건에는 사용하지 않습니다.
OnTriggerExit2D. 구역 효과 해제처럼 떠나는 시점이 필요할 때 사용합니다.
한 번 수집할 일을 Stay에 두지 않습니다
Player가 Trigger 안에 여러 physics step 머무르면 Stay는 반복 호출됩니다. 카운트가 빠르게 여러 번 증가할 수 있으므로 이번 주 수집, 위험, 목표는 Enter를 기본으로 사용합니다.
Unity가 접촉 정보를 parameter로 건넵니다
Trigger가 다른 Collider와 겹치면 Unity가 정확한 이름과 형태의 event function을 호출합니다. 우리는 직접 호출하지 않고, 전달된 other를 읽어 누구인지 판단합니다.
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log(other.name);
}
private void외부에 결과를 반환하지 않는 event function입니다. Unity가 이름과 parameter 형태를 보고 호출합니다.OnTriggerEnter2D2D Trigger 경계에 다른 Collider가 들어온 순간을 나타냅니다. 3D 함수 이름과 섞지 않습니다.Collider2D other이번 접촉에 들어온 상대 Collider를 가리킵니다. 상대의 이름, Tag, Component를 확인하는 출발점입니다.other.name시연 중 어떤 GameObject가 들어왔는지 Console에서 확인합니다. 실제 판단은 이름 문자열보다 Tag와 Component를 사용합니다.
2D Trigger callback의 최소 물리 구성은?
두 오브젝트를 합친 조건입니다.
Layer는 만남을 거르고, Tag는 상대를 확인합니다
둘은 비슷해 보이지만 질문이 다릅니다. Layer는 물리 엔진이 접촉을 계산할지 정하고, Tag는 callback 안에서 상대의 의미를 확인합니다.
누구와 접촉할 수 있는가?
Player, Environment, Interaction처럼 물리 그룹을 나눕니다. Layer Collision Matrix가 허용하지 않으면 callback 이전에 접촉 후보가 제거됩니다.
들어온 상대는 누구인가?
Player처럼 GameObject의 역할을 표시합니다. callback에서 CompareTag로 빠르고 명확하게 확인합니다.
무엇이 앞에 그려지는가?
Sprite Renderer의 화면 표시 순서입니다. 물리 접촉 여부나 Trigger callback에는 영향을 주지 않습니다.
어떤 능력을 가지고 있는가?
TryGetComponent로 상대에게 필요한 Script가 실제로 붙어 있는지 확인하고, 성공했을 때만 그 기능을 호출합니다.
if (!other.CompareTag("Player"))
{
return;
}
!는 논리값을 반대로 바꿉니다. “Player Tag와 같은가?”가 false라면 !false는 true가 되어 즉시 돌아갑니다. 따라서 아래쪽 수집 코드는 Player에게만 실행됩니다.
물리 접촉 필터와 상대 역할 확인의 올바른 조합은?
Layer와 Tag의 책임을 고릅니다.
수집물 하나의 사건 흐름을 끝까지 읽습니다
아래 코드는 교수자 시연용 최소 예시입니다. 아직 수집 개수를 저장하지 않고, Player가 들어오면 한 번 기록한 뒤 수집물을 비활성화합니다.
using UnityEngine;
public class Collectible : MonoBehaviour
{
private bool collected;
private void OnTriggerEnter2D(Collider2D other)
{
if (collected)
{
return;
}
if (!other.CompareTag("Player"))
{
return;
}
collected = true;
Debug.Log(name + " 수집 완료");
gameObject.SetActive(false);
}
}
collected이미 처리한 수집물인지 기억합니다. 같은 사건이 겹쳐 들어와도 한 번만 처리하는 방어선입니다.CompareTag("Player")들어온 상대가 Player 역할인지 확인합니다. 다른 Trigger나 오브젝트는 즉시 건너뜁니다.collected = true화면을 숨기기 전에 상태를 먼저 기록합니다. 코드의 의도를 분명하게 만듭니다.SetActive(false)수집물 GameObject를 비활성화해 화면과 물리 접촉에서 제거합니다. Prefab Asset 자체는 사라지지 않습니다.
시연에서 확인할 장면
- Is Trigger 끄기
Player가 수집물에 막히고 Trigger callback은 발생하지 않는 차이를 보여 줍니다.
- Player Rigidbody2D의 Simulated 끄기
필수 물리 구성이 깨졌을 때 callback이 오지 않는 상황을 비교합니다.
- Layer 조합 끄기
코드는 그대로지만 Matrix에서 접촉을 막으면 사건이 사라지는 것을 보여 줍니다.
- Tag 바꾸기
접촉은 성립하지만 코드의 역할 확인에서 return되는 차이를 보여 줍니다.
한 사건을 원인 순서로 설명합니다
학생은 화면을 보지 않고 다음 흐름을 말합니다. 교수자는 용어 암기보다 순서와 책임의 연결이 맞는지 확인합니다.
두 Collider2D가 공간에서 겹칩니다.
Rigidbody2D 조건과 Layer Matrix를 통과합니다.
Unity가 OnTriggerEnter2D에 other를 전달합니다.
Tag를 확인하고 수집물 상태를 바꿉니다.
Unity 6.6 공식 문서
수업에서는 핵심 관계만 쉬운 언어로 설명합니다. 정확한 callback 조건과 API 의미는 아래 공식 문서에서 확인합니다.
2D game creation workflow ↗
Collider 2D와 Trigger가 물리적 차단과 겹침 사건을 만드는 기본 구조
OnTriggerEnter2D ↗
other parameter와 2D Trigger 이벤트에 필요한 Rigidbody2D 조건
Component.CompareTag ↗
Collider2D 같은 Component가 속한 GameObject의 Tag를 확인하는 API
Layer Collision Matrix ↗
Layer 조합별로 Collider 접촉을 허용하거나 제거하는 Project 설정
질문이 남았다면
“Collectible의 Is Trigger는 켜져 있고 Player에 Rigidbody2D가 있습니다. 접촉은 되지만 CompareTag에서 return되는 것 같습니다”처럼 확인한 조건과 멈춘 지점을 함께 말합니다.