02 물리·충돌 - jes79/Unity-AI-Glossary-Playground GitHub Wiki

02 물리·충돌

"부딪혀도 반응이 없어요"는 대부분 Collider/Trigger/레이어 문제입니다. 요청할 때 2D인지 3D인지 꼭 밝히세요.

씬 14개 · 폴더 Assets/00_Scenes/02_Physics

번호 용어 쉽게 말하면 씬에서 보여 주는 것 구현 방식
0201 Collider 충돌 모양 (Box, Sphere, Capsule, Mesh) SphereCollider 총알이 벽에 맞으면 사라짐, Collider 종류 비교 런타임 데모
0202 Trigger (Is Trigger) 통과는 되지만 '닿았다'만 감지 Trigger 코인 OnTriggerEnter로 점수 +10, Is Trigger 끄기 비교 런타임 데모
0203 OnCollisionEnter / OnTriggerEnter 충돌·접촉 순간 실행되는 함수 적과 OnCollisionEnter 시 체력 감소, 콜백 6종 로그 런타임 데모
0204 Layer / Layer Collision Matrix 어떤 그룹끼리 부딪힐지 설정 IgnoreLayerCollision으로 적 총알이 적끼리 안 맞게, 매트릭스 UI 런타임 데모
0205 Tag 오브젝트 이름표 Enemy 태그만 데미지, 태그 검사 끄기 비교 런타임 데모
0206 Raycast 보이지 않는 레이저로 앞에 뭐가 있는지 검사 카메라 중앙 Raycast로 맞은 오브젝트 이름 출력 런타임 데모
0207 SphereCast / OverlapSphere 원형 범위 검사 폭발 반경 5m OverlapSphere 데미지, SphereCast 비교 런타임 데모
0208 AddForce / Impulse 힘을 가해 밀기 AddExplosionForce로 상자 날리기, ForceMode 4종 비교 런타임 데모
0209 넉백 (Knockback) 맞으면 뒤로 밀려남 피격 시 공격자 반대 방향 넉백 3 런타임 데모
0210 Physics Material 마찰·탄성 설정 Bounciness 0.8 공 등 탄성·마찰 비교 런타임 데모
0211 히트박스 / 허트박스 공격 판정 범위 / 맞는 판정 범위 휘두르기 중 0.1초만 히트박스 활성, 타임라인 UI 런타임 데모
0212 래그돌 (Ragdoll) 죽으면 몸이 축 늘어지는 물리 클릭하면 Animator 끄고 래그돌 전환 런타임 데모
0213 Joint (Hinge, Spring) 물체끼리 연결 (문, 밧줄) HingeJoint 문, SpringJoint 추, 밧줄 런타임 데모
0214 터널링 / Continuous 충돌 빠른 물체가 벽을 뚫고 지나가는 현상 / 해결 설정 빠른 총알 Discrete는 벽 뚫고 Continuous는 막힘 런타임 데모

항목별 상세

0201

Collider — 충돌 모양 (Box, Sphere, Capsule, Mesh)

요청 예문: "총알에 SphereCollider를 달고 벽에 맞으면 사라지게 해줘."

  • 씬: Assets/00_Scenes/02_Physics/0201_Collider.unity
  • 핵심 스크립트: ColliderShooter, ColliderBullet
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0201_Collider.cs
  • 구현 방식: 런타임 데모
  • 개념: 물체의 충돌 모양을 정하는 컴포넌트. 실제 보이는 메시와 별개여서, 복잡한 모델에도 Box·Sphere·Capsule 같은 단순한 모양을 씌우는 게 성능상 유리하다. MeshCollider 는 정확하지만 비싸다.
  • 씬에서 보여 주는 것: SphereCollider 총알이 벽에 맞으면 사라짐, Collider 종류 비교
  • 확인 포인트: 마우스 왼쪽 클릭으로 총알을 쏘고 V 로 Collider 모양을 켜 보세요. 링(MeshCollider)의 구멍은 총알이 통과하는데, 석상은 생긴 모양이 아니라 캡슐 기준으로 맞습니다.

0202

Trigger (Is Trigger) — 통과는 되지만 '닿았다'만 감지

요청 예문: "코인을 Trigger로 만들고 OnTriggerEnter에서 점수 +10 해줘."

  • 씬: Assets/00_Scenes/02_Physics/0202_Trigger.unity
  • 핵심 스크립트: CoinCollector
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0202_Trigger.cs
  • 구현 방식: 런타임 데모
  • 개념: Is Trigger 를 켠 Collider. 물체를 막지 않고 통과시키면서 닿았다는 사실만 알려 준다. 아이템 획득, 구역 진입, 함정 감지처럼 물리적으로 밀 필요 없는 판정에 쓴다.
  • 씬에서 보여 주는 것: Trigger 코인 OnTriggerEnter로 점수 +10, Is Trigger 끄기 비교
  • 확인 포인트: WASD 로 코인을 지나가 보세요. Trigger 가 켜져 있으면 통과하면서 점수가 +10 되고, T 로 끄면 코인이 벽처럼 막히고 점수는 오르지 않습니다.

0203

OnCollisionEnter / OnTriggerEnter — 충돌·접촉 순간 실행되는 함수

요청 예문: "적과 OnCollisionEnter 되면 플레이어 체력을 깎아줘."

  • 씬: Assets/00_Scenes/02_Physics/0203_CollisionCallbacks.unity
  • 핵심 스크립트: CollisionEventPlayer, ChaserEnemy
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0203_CollisionCallbacks.cs
  • 구현 방식: 런타임 데모
  • 개념: 충돌이나 접촉이 일어난 순간 Unity 가 자동으로 불러 주는 함수들. Enter/Stay/Exit 세 시점 × Collision/Trigger 두 종류로 나뉘며, 어느 쪽이 불리는지는 Is Trigger 설정에 따라 결정된다.
  • 씬에서 보여 주는 것: 적과 OnCollisionEnter 시 체력 감소, 콜백 6종 로그
  • 확인 포인트: 적과 부딪히면 OnCollisionEnter 로 체력이 깎이고, 초록 독 늪에 들어가면 Enter → Stay(초당 피해) → Exit 가 차례로 불립니다. 오른쪽 로그에서 어떤 콜백이 언제 불리는지 보세요.

0204

Layer / Layer Collision Matrix — 어떤 그룹끼리 부딪힐지 설정

요청 예문: "적 총알이 적끼리는 안 맞도록 레이어 충돌 설정 방법을 알려줘."

  • 씬: Assets/00_Scenes/02_Physics/0204_LayerCollisionMatrix.unity
  • 핵심 스크립트: LayerMatrixDemo, LayerBullet
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0204_LayerCollisionMatrix.cs
  • 구현 방식: 런타임 데모
  • 개념: 오브젝트를 레이어로 묶고, 어떤 레이어끼리 충돌할지를 표로 지정하는 설정. 아군 총알이 아군을 맞히지 않게 하거나 불필요한 충돌 계산을 줄이는 데 쓴다.
  • 씬에서 보여 주는 것: IgnoreLayerCollision으로 적 총알이 적끼리 안 맞게, 매트릭스 UI
  • 확인 포인트: M 으로 EnemyBullet ↔ Enemy 충돌을 끄고 켜 보세요. 켜져 있으면 뒤쪽 포탑의 총알이 앞의 적에게 막히고, 끄면 적 몸을 통과해 플레이어까지 날아옵니다.

0205

Tag — 오브젝트 이름표

요청 예문: "Enemy 태그가 붙은 것만 데미지를 받게 해줘."

  • 씬: Assets/00_Scenes/02_Physics/0205_Tag.unity
  • 핵심 스크립트: TagDamageDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0205_Tag.cs
  • 구현 방식: 런타임 데모
  • 개념: 오브젝트에 붙이는 문자열 이름표. CompareTag 로 종류를 구분하는 가장 간단한 방법이지만, 하나만 붙일 수 있고 오타를 컴파일러가 잡아 주지 않아 수가 많아지면 레이어나 인터페이스가 낫다.
  • 씬에서 보여 주는 것: Enemy 태그만 데미지, 태그 검사 끄기 비교
  • 확인 포인트: F 로 태그 검사를 끄고 켜며 여러 대상을 공격해 보세요. 켜면 Enemy 태그가 붙은 빨간 적만 피해를 입고, 상자·NPC·플레이어는 무시됩니다. 머리 위 글자가 각자의 태그입니다.

0206

Raycast — 보이지 않는 레이저로 앞에 뭐가 있는지 검사

요청 예문: "카메라 중앙에서 Raycast를 쏴서 맞은 오브젝트 이름을 출력해줘."

  • 씬: Assets/00_Scenes/02_Physics/0206_Raycast.unity
  • 핵심 스크립트: CenterRaycaster
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0206_Raycast.cs
  • 구현 방식: 런타임 데모
  • 개념: 한 점에서 방향으로 보이지 않는 선을 쏘아 처음 맞는 Collider 를 알아내는 함수. 총 조준, 시선 판정, 바닥 검사, 마우스로 물체 집기 등 거의 모든 판정의 기본 도구다.
  • 씬에서 보여 주는 것: 카메라 중앙 Raycast로 맞은 오브젝트 이름 출력
  • 확인 포인트: 화면 중앙으로 Raycast 를 쏘아 맞은 오브젝트 이름이 아래에 나오는지 보세요. L 로 LayerMask 를 걸면 유리창을 무시하고 그 뒤 물체가 잡힙니다.

0207

SphereCast / OverlapSphere — 원형 범위 검사

요청 예문: "폭발 반경 5m 안의 적을 OverlapSphere로 찾아서 데미지를 줘."

  • 씬: Assets/00_Scenes/02_Physics/0207_SphereCastOverlap.unity
  • 핵심 스크립트: AreaQueryDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0207_SphereCastOverlap.cs
  • 구현 방식: 런타임 데모
  • 개념: 점이 아니라 구를 날려 검사하는 SphereCast, 범위 안의 모든 물체를 한 번에 모으는 OverlapSphere. 폭발 범위 피해나 두꺼운 총알 판정처럼 가는 선으로는 놓치는 경우에 쓴다.
  • 씬에서 보여 주는 것: 폭발 반경 5m OverlapSphere 데미지, SphereCast 비교
  • 확인 포인트: 왼쪽 클릭으로 폭발시켜 반경 5m 안의 적만 피해를 입는지, 가까운 적이 더 아픈지 보세요. 주황 상자는 마스크에서 빠져 있어 범위 안에 있어도 무시됩니다.

0208

AddForce / Impulse — 힘을 가해 밀기

요청 예문: "폭발 시 주변 Rigidbody에 AddExplosionForce로 날려줘."

  • 씬: Assets/00_Scenes/02_Physics/0208_AddForceImpulse.unity
  • 핵심 스크립트: ForceDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0208_AddForceImpulse.cs
  • 구현 방식: 런타임 데모
  • 개념: Rigidbody 에 힘을 주는 함수. ForceMode 에 따라 지속적으로 미는 힘(Force), 순간 충격(Impulse), 질량 무시 속도 변화(VelocityChange) 등으로 결과가 크게 달라진다.
  • 씬에서 보여 주는 것: AddExplosionForce로 상자 날리기, ForceMode 4종 비교
  • 확인 포인트: Space 로 네 레인에 같은 값을 ForceMode 만 바꿔 주고 날아가는 거리를 비교해 보세요. 각 레인의 질량 1 상자와 질량 5 상자가 다르게 날아가는지도 함께 보세요.

0209

넉백 (Knockback) — 맞으면 뒤로 밀려남

요청 예문: "피격 시 공격자 반대 방향으로 넉백 3만큼 줘."

  • 씬: Assets/00_Scenes/02_Physics/0209_Knockback.unity
  • 핵심 스크립트: KnockbackReceiver, KnockbackAttacker
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0209_Knockback.cs
  • 구현 방식: 런타임 데모
  • 개념: 피격 시 공격자 반대 방향으로 밀려나는 처리. 때렸다는 감각을 전달하는 핵심 요소이고, 동시에 연속 공격을 끊어 주는 게임플레이 장치이기도 하다.
  • 씬에서 보여 주는 것: 피격 시 공격자 반대 방향 넉백 3
  • 확인 포인트: Space 로 적을 때려 보세요. 적이 공격 반대 방향으로 3m 밀려납니다. K 로 넉백을 끄면 같은 공격인데도 타격감이 사라지는 것을 비교해 보세요.

0210

Physics Material — 마찰·탄성 설정

요청 예문: "공이 통통 튀도록 Bounciness 0.8 Physics Material을 만들어줘."

  • 씬: Assets/00_Scenes/02_Physics/0210_PhysicsMaterial.unity
  • 핵심 스크립트: PhysicsMaterialDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0210_PhysicsMaterial.cs
  • 구현 방식: 런타임 데모
  • 개념: Collider 에 씌우는 마찰과 탄성 설정 에셋. 얼음판을 미끄럽게, 공을 통통 튀게 만드는 등 물체의 표면 성질을 코드 없이 바꿀 수 있다.
  • 씬에서 보여 주는 것: Bounciness 0.8 공 등 탄성·마찰 비교
  • 확인 포인트: 공들을 떨어뜨려 Bounciness 0.8 공은 계속 튀고, 0 인 공은 바로 멈추는지 보세요. 마찰이 낮은 바닥에서는 상자가 미끄러져 멀리 갑니다.

0211

히트박스 / 허트박스 — 공격 판정 범위 / 맞는 판정 범위

요청 예문: "검 휘두를 때 애니메이션 중간 0.1초만 히트박스를 켜줘."

  • 씬: Assets/00_Scenes/02_Physics/0211_HitboxHurtbox.unity
  • 핵심 스크립트: SwordHitboxDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0211_HitboxHurtbox.cs
  • 구현 방식: 런타임 데모
  • 개념: 공격이 맞는지 판정하는 범위(히트박스)와 피해를 받는 범위(허트박스)를 따로 두는 설계. 히트박스를 공격 모션 중 짧은 구간만 켜는 것이 격투·액션 게임 타격감의 핵심이다.
  • 씬에서 보여 주는 것: 휘두르기 중 0.1초만 히트박스 활성, 타임라인 UI
  • 확인 포인트: H 로 히트박스를 0.1초만 ↔ 휘두르는 내내로 바꿔 보세요. 0.1초만 켜면 정면 허수아비만 맞고, 내내 켜면 양옆까지 맞습니다. 아래 타임라인의 빨간 구간이 활성 시간입니다.

0212

래그돌 (Ragdoll) — 죽으면 몸이 축 늘어지는 물리

요청 예문: "적이 죽으면 애니메이터를 끄고 래그돌로 전환해줘."

  • 씬: Assets/00_Scenes/02_Physics/0212_Ragdoll.unity
  • 핵심 스크립트: RagdollEnemy, RagdollDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0212_Ragdoll.cs
  • 구현 방식: 런타임 데모
  • 개념: 캐릭터의 뼈마다 Rigidbody 와 Joint 를 붙여, 애니메이션을 끄고 물리에 몸을 맡기는 처리. 죽는 연출이 매번 달라져 자연스럽지만, Animator 를 끄지 않으면 애니메이션과 물리가 싸워 몸이 폭발한다.
  • 씬에서 보여 주는 것: 클릭하면 Animator 끄고 래그돌 전환
  • 확인 포인트: 적의 부위를 클릭해 쓰러뜨려 보세요. 맞은 부위와 방향에 따라 쓰러지는 모습이 매번 다릅니다. A 로 Animator 끄기를 OFF 하면(나쁜 예) 몸이 터지듯 뒤틀리는 것을 확인할 수 있습니다.

0213

Joint (Hinge, Spring) — 물체끼리 연결 (문, 밧줄)

요청 예문: "HingeJoint로 밀면 열리는 문을 만들어줘."

  • 씬: Assets/00_Scenes/02_Physics/0213_Joints.unity
  • 핵심 스크립트: JointDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0213_Joints.cs
  • 구현 방식: 런타임 데모
  • 개념: 두 Rigidbody 를 물리적으로 잇는 컴포넌트. Hinge 는 경첩처럼 한 축으로 돌고, Spring 은 고무줄처럼 당긴다. 문, 밧줄, 사슬, 흔들다리 같은 장치에 쓴다.
  • 씬에서 보여 주는 것: HingeJoint 문, SpringJoint 추, 밧줄
  • 확인 포인트: WASD 로 몸으로 가운데 문을 밀어 열어 보세요. L 로 각도 제한을, C 로 자동 닫힘(Spring)을 끄고 켜며 차이를 보세요. 오른쪽 추와 왼쪽 밧줄도 끌어 보세요.

0214

터널링 / Continuous 충돌 — 빠른 물체가 벽을 뚫고 지나가는 현상 / 해결 설정

요청 예문: "빠른 총알이 벽을 뚫고 지나가. Continuous Collision Detection으로 고쳐줘."

  • 씬: Assets/00_Scenes/02_Physics/0214_TunnelingCCD.unity
  • 핵심 스크립트: TunnelingDemo, TunnelingBullet
  • 빌더: Assets/01_Scripts/Editor/Scenes/02_Physics/Build0214_TunnelingCCD.cs
  • 구현 방식: 런타임 데모
  • 개념: 빠른 물체가 한 프레임에 벽을 지나쳐 충돌을 놓치는 현상(터널링)과, Collision Detection 을 Continuous 로 바꿔 이동 경로 전체를 검사하게 하는 해결책. 총알·빠른 투사체에서 자주 문제가 된다.
  • 씬에서 보여 주는 것: 빠른 총알 Discrete는 벽 뚫고 Continuous는 막힘
  • 확인 포인트: 같은 속도의 총알을 두 발 쏴 비교해 보세요. Discrete 총알은 얇은 벽을 그냥 통과하고, Continuous 총알은 벽에 정확히 막힙니다.