icon
10장 : 물리 및 환경 상호작용

파티클과 블루프린트 연동


지난 절에서는 오브젝트에 물리 시뮬레이션을 적용하고 질량이나 힘을 제어하는 기본적인 방법을 알아보았습니다. 이제 물리 시뮬레이션의 핵심이자 게임플레이 상호작용의 근간이 되는 콜리전(Collision) 에 대해 다룰 차례입니다. 콜리전은 오브젝트들이 서로 부딪히고 반응하는 방식을 정의하며, 이를 통해 데미지, 상호작용, 물리적 피드백 등 다양한 게임플레이 요소를 구현할 수 있습니다.

이번 절에서는 언리얼 엔진에서 콜리전 설정을 하는 방법과 콜리전 이벤트를 처리하여 게임플레이 로직과 연동하는 방법에 대해 자세히 알아보겠습니다.


콜리전(Collision)이란 무엇인가?

콜리전(Collision) 은 게임 월드 내의 오브젝트들이 물리적으로 서로 부 딪히는 것을 감지하고 반응하는 시스템입니다. 실제 메시(Static Mesh, Skeletal Mesh 등) 자체가 물리 계산에 직접 사용되기에는 너무 복잡하므로, 언리얼 엔진에서는 실제 메시를 둘러싸는 단순화된 형태의 콜리전 메시(Collision Mesh) 를 사용합니다. 이 콜리전 메시들은 서로 교차하는지 여부를 검사하여 충돌을 감지하고, 그 결과에 따라 물리적 반응(튕겨 나감, 멈춤)이나 이벤트(On Hit, On Overlap)를 발생시킵니다.

콜리전이 필요한 이유

  • 물리적 상호작용: 캐릭터가 벽에 부딪혀 멈추거나, 총알이 오브젝트에 맞아 튕겨 나가거나 파괴되는 등의 물리적 반응을 구현합니다.
  • 게임플레이 로직: 플레이어가 특정 아이템을 획득하거나, 적이 특정 영역에 진입했을 때 이벤트를 발생시키는 등의 상호작용 로직을 구현합니다.
  • 성능 최적화: 복잡한 실제 메시 대신 단순한 콜리전 메시를 사용하여 충돌 계산의 오버헤드를 줄입니다.

콜리전 설정의 세 가지 주요 단계

언리얼 엔진에서 콜리전을 설정하는 방법은 크게 세 가지 계층으로 나뉩니다.

콜리전 프리셋

가장 쉽고 빠르게 콜리전 특성을 설정하는 방법입니다. 언리얼 엔진은 자주 사용되는 콜리전 조합을 미리 정의해둔 프리셋을 제공합니다.

컴포넌트 선택: 콜리전을 설정할 Primitive Component (예: Static Mesh Component, Capsule Component, Box Component 등)를 선택합니다.

디테일(Details) 패널 > 콜리전(Collision) 섹션:

  • Collision Presets: 드롭다운 메뉴를 클릭합니다.
  • 주요 프리셋
    • No Collision: 어떤 충돌도 감지하지 않습니다. 유령처럼 모든 것을 통과합니다.
    • OverlapAll: 모든 것을 통과하지만, 모든 것에 대한 오버랩 이벤트를 발생시킵니다. (트리거 볼륨)
    • BlockAll: 모든 것을 막고, 충돌 시 물리적 반응을 일으킵니다.
    • PhysicsActor: 물리 시뮬레이션이 적용될 오브젝트에 사용됩니다. (중력, 힘 등에 반응)
    • Pawn / CharacterMesh / Vehicle 등: 캐릭터나 차량 등 특정 종류의 오브젝트에 대한 표준 설정입니다.
  • 활용: 대부분의 경우, 이 프리셋들을 활용하여 빠르게 콜리전 설정을 할 수 있습니다.

콜리전 채널 및 응답

프리셋만으로는 부족할 때, 각 오브젝트가 어떤 종류의 오브젝트와 상호작용할지 세밀하게 제어할 수 있습니다.

Collision Presets > Custom... 선택: Custom 옵션을 선택하면 상세한 콜리전 설정을 직접 할 수 있습니다.

Object Type: 해당 컴포넌트가 어떤 '종류'의 오브젝트인지를 정의합니다.

  • 기본 제공: WorldStatic (움직이지 않는 월드), WorldDynamic (움직이는 월드 오브젝트), Pawn, PhysicsBody, Vehicle, Destructible 등.
  • 사용자 정의 채널 추가: 편집(Edit) > 프로젝트 세팅(Project Settings) > 엔진(Engine) > 콜리전(Collision)으로 이동하여 New Object Channel을 추가할 수 있습니다. (예: Projectile, Explosion, Collectible)
    • Default Response를 설정하여 해당 채널이 기본적으로 어떻게 반응할지 정합니다.

Trace Responses: 이 컴포넌트가 Trace (라인 트레이스, 박스 트레이스 등)에 어떻게 반응할지 정의합니다.

  • Ignore (무시), Overlap (겹침 감지), Block (막힘 감지)

Object Responses: 다른 Object Type들과 어떻게 상호작용할지 정의합니다.

  • Object Type에 대해 Ignore, Overlap, Block 중 하나를 선택합니다.
  • 예시
    • 플레이어 캐릭터의 콜리전은 Pawn 채널에 Block으로 응답해야 합니다.
    • 총알은 Projectile 채널이며, WorldStaticBlock하고, PawnOverlap하여 데미지를 주되 통과할 수 있도록 설정할 수 있습니다.
    • 아이템은 Collectible 채널이며, PawnOverlap하여 획득 이벤트를 발생시킵니다.

콜리전 메시 타입

스태틱 메시의 경우, Static Mesh Editor에서 콜리전 메시의 형태를 설정할 수 있습니다. 이는 시각적 메시의 복잡도와 물리 시뮬레이션의 정확도, 성능에 영향을 미칩니다.

스태틱 메시 에셋 더블클릭: 콘텐츠 브라우저에서 스태틱 메시 에셋을 더블클릭하여 스태틱 메시 에디터를 엽니다.

콜리전(Collision) 메뉴

  • Add Box/Sphere/Capsule Simplified Collision: 가장 간단한 형태의 기본 도형 콜리전을 추가합니다. 성능에 가장 좋습니다.
  • Add K-DOP X/Y/Z Simplified Collision: 여러 개의 경사면을 가진 단순화된 콜리전을 생성합니다. (더 정확하지만 여전히 최적화됨)
  • Auto Convex Collision: 메시의 형태를 따라가는 볼록 콜리전을 자동으로 생성합니다. (가장 정확하지만 성능 부하가 있을 수 있음)
  • Complex Collision as Simple: 실제 스태틱 메시의 모든 삼각형을 콜리전으로 사용합니다. 가장 정확하지만 성능에 가장 큰 부하를 줍니다. 물리 시뮬레이션에는 거의 사용되지 않고, Trace (특히 정확한 픽셀 단위 트레이스)에 주로 사용됩니다.
    • 콜리전 복잡도(Collision Complexity) 드롭다운에서 Use Complex as Simple을 선택합니다.

Collision > Show Simple Collision: 체크하여 현재 설정된 콜리전 메시를 시각적으로 확인합니다.


콜리전 이벤트 처리

콜리전이 감지되면 언리얼 엔진은 특정 이벤트를 발생시켜 블루프린트에서 로직을 구현할 수 있도록 합니다.

On Hit 이벤트 (Block 응답 시)

오브젝트가 다른 오브젝트에 Block 으로 응답하는 콜리전이 발생했을 때 트리거됩니다. 주로 물리적 충돌과 관련된 로직에 사용됩니다.

  • 설정: 컴포넌트를 선택하고 디테일(Details) 패널의 콜리전(Collision) 섹션에서 Generate Hit Events 를 체크합니다.

  • 이벤트 그래프: 컴포넌트를 선택한 상태에서 디테일 패널 하단의 이벤트(Events) 섹션에서 On Component Hit 이벤트 옆의 + 버튼을 클릭합니다.

  • 주요 핀

    • Other Comp: 충돌한 상대 컴포넌트
    • Normal Impulse: 충돌 지점에서 가해진 충격량 벡터 (물리적 반응 계산에 유용)
    • Hit Location: 충돌이 발생한 월드 위치
    • Hit Normal: 충돌 지점의 표면 법선 벡터
  • 활용 예시

    • 총알이 벽에 맞으면 파편 이펙트와 사운드 재생.
    • 캐릭터가 낙하 후 땅에 부딪혔을 때 착지 애니메이션 재생.
    • 파괴 가능한 오브젝트가 충분한 힘으로 충돌했을 때 파괴.

On Overlap 이벤트 (Overlap 응답 시)

오브젝트가 다른 오브젝트에 Overlap 으로 응답하는 콜리전이 발생했을 때 트리거됩니다. 주로 트리거 영역, 아이템 줍기 등 물리적 충돌 없이 상호작용만 필요한 경우에 사용됩니다.

  • 설정: 컴포넌트를 선택하고 디테일 패널의 콜리전 섹션에서 Collision PresetsOverlapAll 등으로 설정하거나, Custom 설정에서 원하는 Object TypeOverlap 응답을 설정합니다.

  • 이벤트 그래프: 컴포넌트를 선택한 상태에서 디테일 패널 하단의 이벤트 섹션에서 On Component Begin Overlap (겹치기 시작할 때)와 On Component End Overlap (겹치기 끝날 때) 이벤트 옆의 + 버튼을 클릭합니다.

  • 주요 핀

    • Other Actor: 겹친 상대 액터
    • Other Comp: 겹친 상대 컴포넌트
  • 활용 예시

    • 플레이어가 체력 포션에 닿으면 획득하고 포션 액터 파괴.
    • 플레이어가 특정 영역에 진입하면 퀘스트 목표 업데이트.
    • AI가 경계 구역에 들어오면 경고 상태로 전환.

트레이스 (Trace): 콜리전 쿼리

Trace (라인 트레이스, 박스 트레이스, 스피어 트레이스 등)는 특정 지점에서 특정 방향으로 선이나 모양을 발사하여 중간에 콜리전이 있는지 검사하는 방법입니다. 물리 시뮬레이션 없이도 충돌 감지를 할 수 있어 매우 유용합니다.

  • Line Trace By Channel: 한 지점에서 다른 지점까지 선을 긋고, 중간에 특정 콜리전 채널에 Block 또는 Overlap하는 오브젝트가 있는지 확인합니다. (예: 총알의 명중 판정, 시야 검사)
  • Multi Line Trace By Channel: 여러 개의 히트 결과를 반환합니다.
  • Box Trace By Channel / Sphere Trace By Channel / Capsule Trace By Channel: 선 대신 특정 모양을 사용하여 트레이스합니다. (예: 근접 공격의 범위 판정)

활용 예시

  • 총알 판정: 총구에서 발사된 라인 트레이스가 적 캐릭터를 Block하면 데미지를 적용.
  • 캐릭터 시야: AI의 눈에서 플레이어까지 라인 트레이스를 발사하여 시야가 가려지는지 확인.
  • 상호작용 검사: 플레이어의 전방에 라인 트레이스를 발사하여 상호작용 가능한 오브젝트(문, 스위치)를 감지.

디버깅 콜리전

  • P 키: 게임 플레이 중 내비메시를 토글하지만, 간혹 콜리전 문제와 헷갈릴 수 있습니다.
  • ~ (콘솔) > pxvis collision: 실행 중인 게임에서 모든 콜리전 메시를 시각적으로 표시합니다.
  • ~ (콘솔) > show collision: 에디터 뷰포트에서 선택된 오브젝트의 콜리전 메시를 표시합니다.
  • 트레이스 디버그 옵션: Line Trace 등의 노드에 Draw Debug Type 핀을 For Duration이나 For One Frame으로 설정하여 트레이스 라인을 시각적으로 확인합니다.

콜리전 시스템은 게임플레이의 상호작용을 구현하는 데 있어 가장 기본적인 도구입니다. 콜리전 프리셋, 채널, 응답, 그리고 이벤트 처리 방법을 정확히 이해하고 활용하는 것이 안정적이고 직관적인 게임플레이를 만드는 데 매우 중요합니다.


이번 절에서는 언리얼 엔진에서 오브젝트 간의 충돌을 정의하고 감지하는 콜리전 시스템의 설정 방법과 On Hit, On Overlap 이벤트를 통한 게임플레이 로직 연동, 그리고 Trace 기능을 활용한 충돌 쿼리에 대해 알아보았습니다. 콜리전은 물리 시뮬레이션과 더불어 게임의 상호작용을 구현하는 핵심 요소입니다.